[Javascript] La funzione event.preventDefault () non funziona in IE


Answers

Se si associa l'evento tramite la funzione addEvent di mootools, il gestore di eventi riceverà un evento fisso (aumentato) passato come parametro. Conterrà sempre il metodo preventDefault ().

Prova questo violino per vedere la differenza nell'associazione degli eventi. http://jsfiddle.net/pFqrY/8/

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

Per tutti gli utenti di jQuery , puoi correggere un evento quando necessario. Supponete di aver usato HTML onclick = ".." e di ottenere un evento specifico per IE privo di preventDefault (), basta usare questo codice per ottenerlo.

e = $.event.fix(e);

Dopo che e.preventDefault (); funziona bene.

Question

Di seguito è riportato il mio codice JavaScript (mootools):

$('orderNowForm').addEvent('submit', function (event) {
    event.preventDefault();
    allFilled = false;
    $$(".required").each(function (inp) {
        if (inp.getValue() != '') {
            allFilled = true;
        }
    });

    if (!allFilled) {
        $$(".errormsg").setStyle('display', '');
        return;
    } else {
        $$('.defaultText').each(function (input) {
            if (input.getValue() == input.getAttribute('title')) {
                input.setAttribute('value', '');
            }
        });
    }

    this.send({
        onSuccess: function () {
            $('page_1_table').setStyle('display', 'none');
            $('page_2_table').setStyle('display', 'none');
            $('page_3_table').setStyle('display', '');
        }
    });
});

In tutti i browser tranne IE, questo funziona correttamente. Ma in IE, questo causa un errore. Ho IE8 così mentre si utilizza il suo debugger JavaScript, ho scoperto che l'oggetto event non ha un metodo preventDefault che sta causando l'errore e quindi il modulo viene inviato. Il metodo è supportato in caso di Firefox (che ho scoperto usando Firebug).

Qualsiasi aiuto?




return false nel listener dovrebbe funzionare in tutti i browser.

$('orderNowForm').addEvent('submit', function () {
    // your code
    return false;
}



Mootools ridefinisce prevent Default in oggetti Event. Quindi il tuo codice dovrebbe funzionare bene su ogni browser. In caso contrario, c'è un problema con il supporto ie8 in mootools.

Hai testato il tuo codice su ie6 e / o ie7?

Il documento dice

Ogni evento aggiunto con addEvent ottiene automaticamente il metodo mootools, senza la necessità di istanziarlo manualmente.

ma in caso contrario, si potrebbe voler provare

new Event(event).preventDefault();



Per disabilitare un tasto della tastiera dopo IE9, utilizzare: e.preventDefault();

Per disabilitare un normale tasto della tastiera sotto IE7 / 8, utilizzare: e.returnValue = false; o return false;

Se tenti di disabilitare una scorciatoia da tastiera (con Ctrl, come Ctrl+F ) devi aggiungere quelle linee:

try {
    e.keyCode = 0;
}catch (e) {}

Ecco un esempio completo solo per IE7 / 8:

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

Riferimento: come disabilitare le scorciatoie da tastiera in IE7 / IE8




preventDefault è uno standard diffuso; usare un ad hoc ogni volta che vuoi essere conforme alle vecchie versioni di IE è complicato, meglio usare un polyfill:

if (typeof Event.prototype.preventDefault === 'undefined') {
    Event.prototype.preventDefault = function (e, callback) {
        this.returnValue = false;
    };
}

Questo modificherà il prototipo dell'evento e aggiungerà questa funzione, una grande funzionalità di javascript / DOM in generale. Ora puoi usare e.preventDefault senza problemi.