jQuery Not селектор вызывает бесконечный цикл - PullRequest
0 голосов
/ 11 сентября 2009

Следующий код вызывает сбой моих браузеров. Для Firefox мне дали возможность, хочу ли я остановить 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>

Однако, если я уберу не селектор, это не приведет к сбою моего браузера.

<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>

Как мне изменить запрос, чтобы он выбирал все, кроме #divLeavingYes и #divLeavingNo?

Ответы [ 3 ]

1 голос
/ 12 сентября 2009

Я не знаю о реализации jQuery, но:

a:not(#divLeavingYes, #divLeavingNo)

не является допустимым селектором CSS3. Селектор: not может принимать только простой селектор . Попробуйте:

a:not(#divLeavingYes):not(#divLeavingNo)
0 голосов
/ 11 сентября 2009

Я не уверен, как структурирован ваш HTML, но, возможно, вы могли бы использовать фильтр slice () в jQuery, чтобы добиться цели ...

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

0 голосов
/ 11 сентября 2009

попробуйте с этим, я включаю "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;
        }
    });
});
...