2009-09-11 8 views
0

다음 코드는 브라우저에서 충돌을 일으 킵니다. 파이어 폭스의 경우 jQuery가 실행되는 시간이 오래 걸리므로 jQuery를 중지할지 여부를 결정하는 옵션이 제공되었습니다.jQuery 셀렉터가 무한 루프를 발생시킵니다.

div id="divLeaving"> 
    You are about to leave to: <span id="spanLeavingURL"></span> 
    <a id="divLeavingYes" href="#">Yes</a><a id="divLeavingNo" href="#">No</a> 
</div> 
<a href="http://www.google.com">google</a> 

<script type="text/javascript" language="javascript"> 

    $(document).ready(function() { 
     $("a:not(#divLeavingYes, #divLeavingNo)").click(function() { 
      var url = $(this).attr("href"); 
      var test_if_local = url.indexOf("mycompany.com"); 
      if (test_if_local == -1) { 
       $("#spanLeavingURL").text(url); 
       $("#divLeavingYes").attr("href", url); 
       $("#divLeavingNo").click(function() { $(this).dialog('destroy'); }); 
       $("#divLeaving").dialog({ modal: true }); 
       return false; 
      } 
     }); 
    }); 
</script> 

그러나 선택기를 제거하면 브라우저가 다운되지 않습니다. 이 모든 #divLeavingYes 및 #divLeavingNo을 제외하고 선택 있도록

<div id="divLeaving"> 
    You are about to leave to: <span id="spanLeavingURL"></span> 
    <a id="divLeavingYes" href="#">Yes</a><a id="divLeavingNo" href="#">No</a> 
</div> 
<a href="http://www.google.com">google</a> 

<script type="text/javascript" language="javascript"> 

    $(document).ready(function() { 
     $("a").click(function() { 
      var url = $(this).attr("href"); 
      var test_if_local = url.indexOf("mycompany.com"); 
      if (test_if_local == -1) { 
       $("#spanLeavingURL").text(url); 
       $("#divLeavingYes").attr("href", url); 
       $("#divLeavingNo").click(function() { $(this).dialog('destroy'); }); 
       $("#divLeaving").dialog({ modal: true }); 
       return false; 
      } 
     }); 
    }); 
</script> 

어떻게 살전 쿼리를 변경합니까? 이와

+0

위의 코드는 Firefox를 다운시키지 않습니다. 포함 할 수있는 코드가 더 있습니까? –

답변

0

시도, 나는 "event.stopPropagation();"을 포함한다 :

$(document).ready(function() { 
    $("a:not(#divLeavingYes, #divLeavingNo)").click(function(event) { 
    event.stopPropagation(); 
     var url = $(this).attr("href"); 
     var test_if_local = url.indexOf("mycompany.com"); 
     if (test_if_local == -1) { 
      $("#spanLeavingURL").text(url); 
      $("#divLeavingYes").attr("href", url); 
      $("#divLeavingNo").click(function() { $(this).dialog('destroy'); }); 
      $("#divLeaving").dialog({ modal: true }); 
      return false; 
     } 
    }); 
}); 
+0

시도해보십시오. 솔루션이 작동하지 않습니다. – burnt1ce

+0

나는 당신의 브라우저가 무엇인지 모른다. IE, Firefox, Chrome, Safary에서 완벽하게 작동하는이 예제이다. 다운되기 전에 어떤 브라우저가 더 구체적인지 또는 어떤 브라우저가이 예제를 시도하는지 질문 할 수 있습니다. 그리고 여러분은이 스크립트들이 완벽하지 않을 것이라는 점을 명심해야합니다. 오류가 코드의 다른 부분에 있는지 확인하기위한 전체 HTML을 가지고 있습니다. –

0

을 나는 당신의 HTML이 어떻게 구성되어 있는지 모르겠지만, 아마 당신은) (jQuery의 조각을 얻을 할 필터링 할 수 트릭 ...

내가 jQuery의 구현에 대해 모르는

http://docs.jquery.com/Traversing/slice

1

:하지만,

a:not(#divLeavingYes, #divLeavingNo) 

은 유효한 CSS3 선택 도구가 아닙니다. : not 선택기는 simple selector 만 사용할 수 있습니다. 시도해보십시오 :

a:not(#divLeavingYes):not(#divLeavingNo) 
관련 문제