2009-10-10 2 views
2

Я использую jQuery.post для выполнения действия, когда пользователь нажимает на внешнюю ссылку. Я приложил событие OnClick к ссылке:Остановить onClick от стрельбы дважды с помощью jQuery

<a id="lib-geo57" onClick="javascript:dConvert('lib-geo','57');" 

пожаров событий, однако это действие должно быть выполнено только один раз. Чтобы избежать второй стрельбы, я подумал об удалении атрибута onClick:

function dConvert(a,k){ 
    $.post("dConverter",{aid:a,key:k}); 
    $("#"+a+k).removeAttr('onclick'); 
}; 

но это не работает. Я также пробовал

$("#"+a+k).attr('onclick',''); 

без успеха. Функция почты продолжает работать в обоих вышеприведенных примерах.

Почему я не могу удалить или изменить атрибут onClick? Что было бы лучшей стратегией, чтобы предотвратить выполнение моего сообщения более одного раза?

ответ

14

с помощью one() удалит обработчик событий после первого нажатия на ссылку <a>.

$('#lib-geo57').one('click', function() { 
    $.post("dConverter",{aid:'lib-geo',key:'57'}); 
}); 

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

$('#lib-geo57').bind('click', function() { 
    $.post("dConverter",{aid:'lib-geo',key:'57'}); 
    $(this).unbind('click'); 
}); 

Если вы наклеивания с onclick атрибутом инлайн, то вам просто необходимо присвоить нулевое свойству, чтобы удалить обработчик событий после первого щелчка.

function dConvert(a,k){ 
    $.post("dConverter",{aid:a,key:k}); 
    $("#"+a+k)[0].onclick = null; 
}; 

Как another poster has pointed out, это изменение на сторону клиента, и поэтому не будет сохранен через обновление страницы. Вам нужно будет придумать какой-то механизм для сохранения изменений, если это то, что вам нужно. Большинство веб-структуры имеют механизм, чтобы сделать это

+0

Поблагодарите человека, это мне тоже помогло! Этот форум ROCKS !!!!!!!!!!!!!!!! 1 – DextrousDave

0

Вы можете отвязать событие щелчка по телефону:

$("a #mylink").unbind('click'); 
+0

Я быстро пробовал это, после того как боролся с другими ответами. Это ближе всего к моей первоначальной идее, и я действительно пытался отключить («onclick»). Кажется, что это работает, но как я могу проверить, что событие click не было отключено? Я использую Firebug для проверки javascript. – Ken

+1

Взгляните на $ ("a #myLink"). Data ('events'). Щелкните в консоли - также вы должны проверить Firequery для Firebug: http://firequery.binaryage.com/ –

0

JQuery не с сохранением состояния между пост-обратно событий и не запомнит кнопку состояния или тот факт, что форма была опубликована.

Вам нужно будет сохранить состояние в файле cookie или URL-адресе на стороне клиента, но это не лучшее решение.

Я бы обрабатывать это требование со стороны сервера (PHP, asp.net и т.д.)

+0

Спасибо за ваш комментарий Mark.Мой «dConverter» - довольно дорогостоящий процесс, который может занять минуту или больше. После того, как он запущен, страница, на которой отображается ссылка, обновляется, сценарий удаляется. Нам просто нужно зафиксировать это взаимодействие пользователя один раз. Тем не менее, я хочу, чтобы пользователь не нажал несколько раз, пока процесс не завершится. Похоже, что некоторые пользователи по-прежнему дважды щелкают по ссылкам! – Ken

0

Вы можете попробовать функцию Jquery .one(). Обработчик выполняется не более одного раза за элемент.

http://api.jquery.com/one/

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