2009-05-08 3 views
6

MoveUp, MoveDown 및 Delete 컨트롤 세트가있는 페이지에 항목 목록이 있습니다.IE에서 jQuery 이벤트 핸들러가 실행되지 않음

컨트롤은 기본적으로 숨겨진 목록의 맨 위에 있습니다. 당신이 항목 행 마우스를 움직일 때, 나는 도구가 현재 행으로 이동하고 클릭 이벤트가 아약스 함수를 호출 ... 이것은 파이어 폭스에서 잘 작동 JQuery와

//doc ready function: 
.. 
var tools = $('#tools'); 
$('#moveup').click(MoveUp); 
$('#movedn').click(MoveDn); 
$('#delete').click(Delete); 
.. 
$('li.item').mouseover(function(){ 
    $(this).prepend(tools); 
}); 

와 컨트롤을 선택합니다. 그러나 IE6과 IE7에서는 클릭이 발생하지 않습니다. 마우스 오버시 바인딩을 해제하고 각 마우스 오버시 리 바인딩을 시도했지만 아무 소용이 없습니다.

나는 또한 자바 스크립트 (예 : 투명한 png 충돌, Z- 색인, 위치 : 절대) 이외의 여러 가지 이유에 대해 조사했습니다. 해결책도 없습니다.

결국 각 항목에 도구 행을 추가하고 마우스 오버/아웃시 표시/숨기기가 필요했습니다. 마찬가지로 잘 작동합니다. 유일한 단점은 내 페이지에 더 많은 '도구'마크 업이 있다는 것입니다.

누군가가 IE가 무시/드롭/마우스 이벤트를 죽인 이유를 아는 사람은 누구입니까 (앞자리를 사용하여)? 나중에 이벤트를 리 바인드해도 아무런 효과가없는 이유는 무엇입니까? 내가 포기하기 전에 거의 2 시간 동안 나를 화나게했다.

답변

8

IE는 DOM에 추가하는 방법에 따라 이벤트를 잃게됩니다.

var ele = $("#itemtocopy"); 

$("#someotheritem").append(ele); // Will not work and will lose events 

$("#someotheritem").append(ele.clone(true)); 

클릭 이벤트에서 .live()를 사용하여 코드를 간소화하는 것이 좋습니다. 생방송으로 마우스 오버/아웃을 지원하지 않습니다. http://docs.jquery.com/Events/live

+0

충분히 공정한, 내가 말한대로 이벤트가 손실됩니다. 그런데 왜 새로운 객체에 이벤트를 추가 할 수 없습니까? 또한 개체를 복사하고 이동하지 않으려합니다. 다시 이벤트가 없어지면 다시 바인딩 할 수 있어야합니다. 또한 이벤트가 발생하지 않으면 href 링크가 뒤따를 것이라고 생각할 수 있습니다.이 경우도 발생하지 않습니다 .. 아무 일도 일어나지 않습니다. – misteraidan

+0

그것은 IE의 DOM의 제한/버그이며, 슬프게도 IE를 지원하려고한다면 지금 당장 살아야합니다. 요소 이동과 관련하여 먼저 복제하지 않고 이동할 수 없으며 순환 참조라는 것을 만들 것입니다. 움직일 때조차도 var cloned = $ ("# element"). clone (true); $ ("# element"). remove(); $ ("newplace"). append (복제); –

+0

좋아, 복제품입니다! 고마워. – misteraidan

0

나는 비슷한 문제가있었습니다. .ready를 사용하여 초기 페이지로드에서 div를로드하려고합니다. 은 FF에서는 잘 작동하지만 ie7에서는 제대로 작동하지 않습니다.

나는이 문제를 해결할 것으로 보이는 해킹을 발견했습니다.

로드 콜백, divLoaded()를 호출했습니다.

divLoaded에서 $ ('targetdiv'). innerText.length < 50 또는로드하지 않았 음을 나타내는 내용을 확인하십시오. 이 사건을 발견하면 함수를 다시 호출하여 해당 div를 다시로드합니다.

이상하게도 ''을 추가합니다. 내가 ajax 함수를 호출하기 전에 innerText에. ajax로드가 마침내 걸리기 전에 3 ~ 4 개의 루프를 통과하는 경우가 있습니다.

이것은 document.ready가 IE7에서 완벽하게 작동한다는 것을 의미합니다. 믿을 수 없다는 약간의 신화를 풀어주는 것처럼 보입니다. 무슨 일이 실제로 일어나고있는 것인가는 .load는 약간의 flakey이며 페이지가로드 될 때 잘 작동하지 않는다는 것입니다.

나는 아직도 jQuery와 관련된 모든 것들을 가지고 있으므로, 소금 한알을 가져 가라. 누군가가 내 작은 가설을 듣는 것을 듣고 싶다.

환호

그렉

2

은 그냥 DOM (IE7, jQuery를 1.4.1)에 추가 항목에 대한 트리거되지 이벤트를 문제 해결에 하루 종일 보냈다 그리고 내가 살아 사용하는 데 필요한 때문에 아니었다(), (Chad), 잘 알았습니다.) 나는 아이템을 복제해야했기 때문에 그렇게하지 못했습니다.

내가 지금처럼에 "#"을했다 앵커 태그를 선택했기 때문에 그것은이었다

var myitem = $('a[href=#top]'); 

내 솔루션은 "속성이 선택기를 포함합니다"를 사용하는 것이었다과 같이 :

var myitem = $('a[href*=top]'); 

다행히도 나는 앞으로도 깨질 가능성이없는 모든 것에 대해 충분히 통제 할 수 있습니다. 이것은 기술적으로 첨부 된 객체와 관련이 없지만 누군가가 시간을 절약 할 수 있기를 바랍니다.

관련 문제