JQuery - несколько триггеров для одной и той же функции - PullRequest
0 голосов
/ 02 декабря 2010

Я занимаюсь разработкой jQuery, но я новичок, так что он немного раздутый и не очень элегантный. По сути, я хочу, чтобы значение cookie обнулялось при отправке одной из двух форм или нажатии их кнопок отправки. Но я не знаю, как объединить условия функции так, чтобы мне нужно было выписать функцию только один раз, поэтому лучшее, что я могу сделать, это:

$('form#searchform-basic').submit(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-basic a.search').click(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-advanced').submit(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-advanced input#search-button-submit').click(function() {
    $.cookie('tab_cookie', null);
});

Должен быть лучший способ, верно?

И прежде чем кто-нибудь спросит, да, вы бы подумали, что вам нужно знать только, когда формы отправляются. Но пропуск событий click означает, что функция не запускается при нажатии кнопок отправки. Я не знаю, почему это так, просто так.

Ответы [ 3 ]

4 голосов
/ 02 декабря 2010

Дайте вашей функции имя, например, так:

function ClearCookie() {
    $.cookie('tab_cookie', null);
}

Таким образом, вы сможете вызывать ее из нескольких событий по мере необходимости.

$('form#searchform-basic').submit(ClearCookie);
$('form#searchform-basic a.search').click(ClearCookie);
$('form#searchform-advanced').submit(ClearCookie);
$('form#searchform-advanced input#search-button-submit').click(ClearCookie);

Вуаля!

Чтобы сделать еще один шаг вперед, вы можете объединить селекторы, которые вызывают одно и то же событие (отправить или щелкнуть), например так:

$('form#searchform-basic, form#searchform-advanced').submit(ClearCookie);
$('form#searchform-basic a.search, form#searchform-advanced input#search-button-submit').click(ClearCookie);

Я бы, вероятно, оставил тег формы и просто использовал идентификаторы, но это только я.

$('#searchform-basic, #searchform-advanced').submit(ClearCookie);
$('#searchform-basic a.search, #searchform-advanced input#search-button-submit').click(ClearCookie);
1 голос
/ 02 декабря 2010

Ну, так как нажатие кнопки отправки фактически отправляет форму, вам не нужно привязывать обработчик кликов вообще к кнопке отправки, просто привяжите свой элемент управления к действию отправки формы (которое происходит вследствие нажатия кнопкикнопка отправки).

Чтобы упростить его в одну строку, добавьте к формам класс, такой как clear-cookie.

<form id="searchform-basic" class="clear-cookie"> ... </form>
<form id="searchform-advanced" class="clear-cookie"> ... </form>

$("form.clear-cookie").submit(function(){
  $.cookie('tab_cookie', null);
});

Более того, к множеству селекторов, однако, вы можете,как уже упоминалось выше, сделать что-то вроде:

$("#searchform-basic, #searchform-advanced").submit( ... );

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

1 голос
/ 02 декабря 2010
$('oneselector','second','third').click(function() {
    $.cookie('tab_cookie', null);
});

попробуйте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...