2009-12-18 3 views
13

Ho un'ancora come questojquery evento di override

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

Ma io voglio essere in grado di ignorare la funzione onclick, come farlo in jQuery?

perché sembra quando aggiungo

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

il nuovo gestore di click non è prevalente quello vecchio

+0

perché click me? struttura/contenuto e comportamento dovrebbero essere separati. http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Wondering

+0

Ho rimosso la funzione onclick e faccio affidamento su tutto su jQuery perché sembra più flessibile in questo modo ... Grazie a tutti per le risposte :) –

risposta

18

Hai provato qualcosa di simile:

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

Vecchio post, ma questo è sicuramente il metodo che ha funzionato per me all'interno della funzione ready() – htmlr

+0

Perfettamente funzionante anche per me! – KatharaDarko

10

Se stai usando jQuery come questo, non si vuole tutti i gestori nel codice HTML . Non puoi semplicemente rimuovere l'attributo onClick?

Se siete preoccupati per la rottura roba, ricerca e sostituzione su:

onclick='return showform(this)' 

e sostituirlo con

class='showform' 

Poi si può fare:

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

che manterrà i tuoi gestori esistenti che lavorano.

22

Nel tuo caso l'evento onCick sovrascrive quello jQuery. Che cosa si potrebbe essere in grado di fare è:

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

ma credo che questo dovrebbe essere incluso dopo la

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

Detto questo, davvero non dovrebbe usare onClicks comunque ... fa il codice è davvero difficile da gestire e modificare (come hai scoperto).

+0

Se siete seguendo Yahoo, tutti gli script sono inclusi alla fine della pagina comunque ... – Skilldrick

+0

Questo è vero, ho pensato che dovrei indicare quella parte però, dato che l'ultimo evento onclick dovrebbe scavalcare il resto no? – SeanJA

+0

Dipende da quando viene chiamato $ ('a'). Unbind(). Se è in $ (document) .ready() allora potrebbe essere nel 'head' e funziona ancora. – Skilldrick

0

C'è un plugin per esso, ma si dovrebbe farlo solo quando è veramente necessario. Il plugin consente di chiamare la funzione originaria o ignorare/sostituirlo interamente

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...));