2010-04-13 20 views
30

Bu aldatıcı basit gibi görünüyor.Satır içi onclick olayını nasıl geçersiz kılarsınız?

JavaScript'i kullanarak aşağıdaki HTML'deki onclick olayını nasıl geçersiz kılarsınız?

<a id="sample" href="..." onclick="alert('hello world')" />...</a> 

jQuery ile denedim, ama bu hile yapmadım:

$('#sample').attr('onclick','alert("done")') 

HTML varsayalım önceden yazılmış ve değiştirilemez, JavaScript ile manipüle dışındaki.

cevap

41

bu deneyin:

// Setting the DOM element's onclick to null removes 
// the inline click handler 
$("#sample")[0].onclick = null; 
$("#sample").click(function() { alert("done") }); 
+0

Bu açık değildi ve işe yaradı. Teşekkürler Andrew. Neden [0]? –

+1

@Diodeus: DOM koleksiyonları veya diziler gibi jQuery nesneleri, her bir öğe için sayısal dizinlere sahiptir. '[0]', seçicinin ilk eşleştirilmiş elemanını getirecektir. –

+0

Kimliği ile seçtiğim için benzersiz olacağını ve bir diziyle sonuçlanmadığını varsayıyorum. Bazen mantıklı görünen şey .... yanlıştır. –

1

Dene: return false; ya doğrudan onclick veya jQuery kullanarak ayarlamak mümkün olmasına rağmen

document.getElementById("sample").onclick = $.noop; 

$.noop == function(){}; 

jQuery noop

+1

Bu da işe yaramadı. –

+0

'$ (" # örnek ") [0] .onclick = null;' ve 'document.getElementById (" örnek "). Onclick = $ .noop;' neredeyse aynıdır. Bunun işe yaramadığını nasıl söyleyebilirsin? –

+0

Bunu test ettim ve bunun amacım için çalıştığını fark ettim (özniteliği geçersiz kılıp kılmadığını görmek için test etmedim, ama muhtemelen öyle) –

6
<a id="sample" href="..." onclick="alert('hello world'); return false;" />...</a> 

Ya

$('#sample').attr('onclick','alert("done"); return false;') 

, değil Aslında tüm jQuery kullanılmasını gerektirir. Faydası, jQuery komut dosyanızın 404 numaralı telefona yol açması durumunda, kodunuz çalışmaya devam edecektir.

Yanıtı here buldum.

+0

+1 Bu, verdiğim cevaptan daha iyi. :-) –

+1

İade false sorun değil, ve bu işe yaramıyor. –

+0

Oh topları, sanırım sorunuzu tamamen yanlış anladım! Üzgünüm dostum: S –

4

Bu aynı zamanda jQuery olmadan yapılabilir:

document.getElementById("sample").setAttribute('onclick','alert("done")'); 
İlgili konular