2010-12-01 2 views
0

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

$('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); 
}); 

Там должен быть лучше, правильно?

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

ответ

4

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

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); 

Voila!

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

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

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

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

Спасибо! Это почти идеально, за исключением того, что я обнаружил через пробную версию и ошибку, что разделение идентификаторов с одинарными кавычками и запятыми вместо запятых не было правильным синтаксисом. Кроме того, я надеялся, что есть способ объединить события .click() и .submit() в один, как в «Если отправить ИЛИ щелкнуть, а затем очистить файл cookie». – Tom 2010-12-03 01:47:40

+0

Спасибо @Tom, я отредактировал, чтобы исправить синтаксис. Насколько я знаю, вы не можете объединить два разных события в одно утверждение. – Marcie 2010-12-03 17:38:30

1
$('oneselector','second','third').click(function() { 
    $.cookie('tab_cookie', null); 
}); 

попробовать что

1

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

Чтобы упростить его в одну строку, добавьте класс в свои формы, например 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(...); 

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

Смежные вопросы