#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. Думаю, я пропустил это из вашего первоначального вопроса.