JavaScript IF оператор проблема - PullRequest
1 голос
/ 01 февраля 2011

У меня проблема с написанием оператора if из-за отсутствия у меня навыков программирования.

есть код:

   $("div.footerMenu li div.onScreen").click( 
  function(e) { e.stopPropagation(); e.preventDefault(); return false; } 
);

Внутри этого div у меня есть простые <a></a> ссылки. И проблема в том, что когда я нажимаю на эту ссылку, ничего не происходит. Я пытаюсь создать функцию, которая не будет выполнять это function(e), если цель .click будет тегом <a></a>. Есть ли простой способ сделать это?

Ответы [ 6 ]

2 голосов
/ 01 февраля 2011

Ваша проблема в том, что, поскольку ваша ссылка находится внутри div, ваш код блокирует событие click, поэтому ничего не происходит. Вы можете попробовать это:

$("div.footerMenu li div.onScreen").click(function(e) { 
    if(e.target.tagName.toLowerCase() != 'a') {
        e.stopPropagation(); 
        e.preventDefault(); 
        return false; 
    }
});

Я использую .toLowerCase (), потому что я не на 100% tagName всегда будет в верхнем регистре во всех браузерах. Просто проверка работоспособности.

1 голос
/ 01 февраля 2011

У меня была похожая проблема, и вот решение, которое работает:)

$("div.footerMenu li div.onScreen").click(function(e) { 
    if( !( $(e.target).is('a') ) ) 
        e.stopPropagation(); e.preventDefault(); return false; 
    } 
);
0 голосов
/ 01 февраля 2011

Вместо того, чтобы проверять, была ли цель a (для меня это немного грязно), я бы предпочел выделить ее и обрабатывать ссылки отдельно.Используя e.stopPropagation только , вы сможете щелкнуть ссылку и выполнить любое действие с ней, а также не допустить всплытия события в div.

$("div").click(function(e){
    alert('You clicked me, I am the div!');
});

$("div a").click(function(e){
    // Allows the link to be clicked but prevents
    // the event from bubbling up to the div
    e.stopPropagation();
}); 

Пример: http://jsfiddle.net/jonathon/s2TxS/

0 голосов
/ 01 февраля 2011

Когда вы нажимаете на элемент, будут выполняться только события.Но не события, связанные с родительскими элементами.Вам нужно изменить селектор, чтобы он соответствовал всем дочерним элементам.

$ ("div.footerMenu li div.onScreen> *") $ ("div.footerMenu li div.onScreen> a")

0 голосов
/ 01 февраля 2011

Вам нужно будет проверить, есть ли у узла tagName == 'A'

if (this.tagName == 'A')

«this» должно ссылаться на узел, по которому щелкают, иначе ищите e.target или e.targetSrc (don 'не знаю эквивалента jQuery)

0 голосов
/ 01 февраля 2011

Да, очень просто

if (e.target.nodeName !== "A") {
    // your code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...