Vous trouverez ci-dessous tous les éléments <a>
à l'intérieur de <div>
avec id blah ayant un attribut href
défini.
$('#blah a[href]').click(function(e) { e.preventDefault(); });
sans jQuery, quelque chose comme le suivant (je l'ai évidemment vécu dans le monde jQuery beaucoup trop longtemps que j'avais initialement preventDefault dans le JavaScript vanille. Malheureusement, cross-browser :() Je l'ai tester ce dans Firefox, IE et Chrome
var anchors = document.getElementById('blah').getElementsByTagName('a');
for(var i=0; i < anchors.length; i++) {
addEvent(anchors[i], 'click', preventDefault);
}
function preventDefault(e) {
e = e || window.event;
(e.preventDefault)?
e.preventDefault() : e.returnValue = false;
}
function addEvent(obj, evType, fn){
if (obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
}
else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
Pour l'intérêt, voici comment jQuery implémente preventDefault()
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = returnTrue;
var e = this.originalEvent;
if(!e)
return;
// if preventDefault exists run it on the original event
if (e.preventDefault)
e.preventDefault();
// otherwise set the returnValue property of the original event to false (IE)
e.returnValue = false;
}
est-il possible w/o jquery? – mrblah
mis à jour pour non-jQuery –