2009-12-18 6 views
13

У меня есть якорь, как этотJQuery переопределить событие

<a href='#' onclick='return showform(this)'>click me</a> 

Но я хочу, чтобы иметь возможность переопределить функцию OnClick, как сделать это в JQuery?

, потому что кажется, когда я добавляю

$('a').click(function() { alert('hi there!'); }); 

новый обработчик щелчка не перекрывая старые один

+0

почему click me? Структура/содержание и поведение должны быть раздельными. http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Wondering

+0

Я удалил функцию onclick и положил все на jquery, потому что он выглядит более гибким таким образом ... Спасибо всем за ответы :) –

ответ

18

Вы пробовали что-то вроде этого:

$("a").removeAttr("onclick"); 
+0

Старый пост, но это определенно метод, который работал для меня в функции ready() – htmlr

+0

Работал отлично для меня тоже! – KatharaDarko

10

Если вы используете JQuery, как это, вы не хотите каких-либо обработчиков в HTML , Не можете ли вы просто удалить атрибут onClick?

Если вы беспокоитесь о разрыве материала, поиск и замена на:

onclick='return showform(this)' 

и заменить

class='showform' 

Тогда вы можете сделать:

$('a.showform').click(function (e) { 
    e.preventDefault(); 
    return showform(this); 
}); 

который будет держать ваши существующие обработчики работают.

22

В вашем случае событие onCick переопределяет jQuery. То, что вы могли бы быть в состоянии сделать это:

$('a').unbind('click').click(function(){ 
    alert('why hello there children.'); 
}) 

Но я считаю, что это должно быть включено после

<a href='#' onclick='return showform(this)'>click me</a> 

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

+0

Если вы следуя за Yahoo, все скрипты включены в конце страницы в любом случае ... – Skilldrick

+0

Это правда, я решил, что должен указать, что часть из них, поскольку последнее событие onclick должно отменять остальные, нет? – SeanJA

+0

Это зависит от $ ('a'). Вызывается функция unbind(). Если он находится в $ (document) .ready(), то он может быть в 'head' и все еще работать. – Skilldrick

0

Там есть плагин для него, но вы должны сделать это только, когда вам действительно нужно. Плагин позволяет вызывать оригинальную функцию или игнорировать/заменить его полностью

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...)); 
Смежные вопросы