jquery запускает dom, чтобы увидеть, есть ли совпадение с идентификатором

#jquery

#jquery

Вопрос:

У меня есть справочный div, который становится видимым, я сделал это так, что если щелчок находится за пределами div, он закрывает справочный div.

Я хочу, чтобы div оставался открытым, если пользователь щелкает внутри div. Для обычного Javascript я использую всплывающий код для сопоставления идентификатора родителя. Мой частичный JS-код

 var click = (e amp;amp; e.target) || (event amp;amp; event.srcElement);
var match = "divid";

while(click.parentNode){
        if(click==match) {
        return;//do nothing
            }//if
  

что эквивалентно jquery этому рекурсивному коду javascript?

TIA

отредактировано, чтобы избежать путаницы.

Комментарии:

1. Итак, у вас есть событие, которое будет прослушивать щелчок в любом месте страницы, но проблема в том, что это включает в себя «открытый» div. Вы хотите слушать только что-либо, КРОМЕ этого div. Или, точнее, он может прослушивать div, но если он слышит щелчок, он ничего не должен делать. Это правильно?

2. @gregp, да. Если щелчок находится внутри div, он не должен закрывать div.

Ответ №1:

Вы можете вернуть false, и это сработает. Или вы можете использовать stopPropagation(), которая является служебной функцией, встроенной в jQuery:

 jQuery("#divid").click(function(event) {
  event.stopPropagation();
});
  

Скрипка здесь: http://jsfiddle.net/W8MfD /

Метод return false все равно будет всплывать, прежде чем возвращать false, насколько я понимаю.

Я склонен полагать, что если вы планируете использовать множество подобных событий, вам было бы полезно использовать какую-то структуру виджетов. Тип поведения, который вы создаете, является обычным явлением, и большинство фреймворков уже имеют его. Пользовательский интерфейс jQuery неплох (хотя, на мой взгляд, он мог бы быть лучше). Там есть и другие.

Комментарии:

1. Привет, gregp, спасибо, я понял эту часть. Я просто хочу знать, как это сделать. Кроме того, этот код по какой-то причине не работает должным образом при начальной загрузке, он работает корректно только после того, как он был запущен один раз.

2. Всегда запускается в первый раз на скрипке. Я на самом деле предпочитаю использовать . делегировать () вместо .click() для определения времени, но я просто быстро собрал его вместе. Что касается вашего вопроса: если вы действительно хотите всплывать вручную, вам не нужен jQuery. Думаю, я пропустил это из вашего первоначального вопроса.