JQuery не проблема селектора - PullRequest
       33

JQuery не проблема селектора

0 голосов
/ 21 декабря 2009

Прежде всего, спасибо за внимание.

У меня есть HTML-документ с оболочкой (контейнером) внутри. Я хочу сделать так, чтобы когда кто-то нажимал на раздел body страницы, он перенаправлялся на xxx, но если он нажимал на оболочку (содержимое страницы), он не перенаправлялся. Я пробовал все, но селектор jquery для $ ('body') выделяет все внутри тела, и я не понимаю, как выбрать все, что не в #wrapper. Я пытался что-то вроде этого:

$('*').not('#wrapper').click(function(){
            window.location = 'http://www.example.com/example-page';
        });

без удачи,

Спасибо, ребята

Alex_

Ответы [ 7 ]

2 голосов
/ 22 декабря 2009

Поскольку события всплывают, вы просто должны иметь возможность прикрепить событие обертки к оболочке, которая удаляет пузырь до тела. После этого вы можете прикрепить событие click к элементу body, чтобы перенаправить туда, куда вам нужно. Это связывало бы события клика только с 2 элементами.

$("#wrapper").click(function(){
    return false;
});

$("body").click(function(){
    console.log("body click");
});
1 голос
/ 21 декабря 2009

Работает ли stopPropagation () в версиях IE? Возможно, использование старого «return false» в конце не дает событию попасть куда-то еще.

Также следует выполнить некоторую проверку нечетного агента, уже доступную в JQuery. (если MSIE, тогда сделайте

event.cancelBubble = true;

иначе, используйте метод stopPropagation

event.stopPropagation();

)

1 голос
/ 21 декабря 2009
    $('*').not('#wrapper').click(function(){
            window.location = 'http://www.merkados.com/quote-request';
    });

свяжет событие со всеми элементами, кроме #wrapper. так что, если ваш HTML

   <div id="anotherdiv"><div id="wrapper">adsads</div></div>

#anotherdiv получит клик по объявлениям. Вы можете использовать stopPropagation () для события

0 голосов
/ 22 декабря 2009

Я сделал это, ребята!Большое спасибо за то, что открыли мне глаза!Вы, ребята, сделали это!Вот окончательный код:

$(':not(#wrapper)').click(function(event){
            if($(this).hasClass('cl')) {
                window.location = 'http://www.example.com/example-page';
            }
              event.stopPropagation();

        });

Как видите, я добавил класс только к телу.StopPropagation в основном останавливает вызовы из #wrapper, поэтому он в основном работает только с любой частью тела, в которой есть cl, а не с оболочкой #.1007 *

0 голосов
/ 21 декабря 2009

Я думаю, вы хотите использовать это:

$(':not(#wrapper)').click(function(){
    window.location = 'http://www.example.com/example-page';
});
0 голосов
/ 21 декабря 2009

Возможно, попробуйте использовать функцию фильтра. Позволяет удалить нежелательные результаты из набора элементов.

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

0 голосов
/ 21 декабря 2009

Наверное, как-то так ..

$(document).click(function(e){
    var el = $(e.target);
    if ( 
        (!$(el).is('#wrapper') ) &&
        $(el).closest('#wrapper').length === 0 
    ) {
        window.location.href = 'http://msn.com';
    }
});

Не тестировал. Я бы не рекомендовал это вообще, навязчиво и странно.

...