javascript - event.preventDefault() फ़ंक्शन IE में काम नहीं कर रहा है




internet-explorer events (8)

मेरे जावास्क्रिप्ट (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', '');
        }
    });
});

आईई को छोड़कर सभी ब्राउज़रों में, यह ठीक काम करता है। लेकिन आईई में, यह एक त्रुटि का कारण बनता है। मेरे पास आईई 8 है इसलिए जावास्क्रिप्ट डीबगर का उपयोग करते समय, मुझे पता चला कि event ऑब्जेक्ट में preventDefault नहीं है, जो त्रुटि उत्पन्न कर रहा है और इसलिए फॉर्म जमा हो रहा है। फ़ायरफ़ॉक्स के मामले में विधि समर्थित है (जिसे मैंने फ़ायरबग का उपयोग करके पाया)।

कोई मदद?


IE9 के बाद कीबोर्ड कुंजी अक्षम करने के लिए, e.preventDefault(); उपयोग करें e.preventDefault();

आईई 7/8 के तहत एक नियमित कुंजीपटल कुंजी को अक्षम करने के लिए, उपयोग करें: e.returnValue = false; या return false;

यदि आप कीबोर्ड शॉर्टकट को अक्षम करने का प्रयास करते हैं (Ctrl के साथ, Ctrl+F तरह) आपको उन पंक्तियों को जोड़ने की आवश्यकता है:

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

आईई 7/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;
    }
});

संदर्भ: आईई 7 / आईई 8 में कीबोर्ड शॉर्टकट को कैसे अक्षम करें


Mootools घटना वस्तुओं में रोकथाम डीफॉल्ट को परिभाषित करता है। तो आपका कोड हर ब्राउज़र पर ठीक काम करना चाहिए। यदि ऐसा नहीं होता है, तो mootools में ie8 समर्थन के साथ एक समस्या है।

क्या आपने अपना कोड i6 और / या ie7 पर परीक्षण किया था?

डॉक्टर कहते हैं

ऐडवेन्ट के साथ जोड़े गए प्रत्येक ईवेंट को मैन्युअल रूप से इसे उदाहरण के बिना स्वचालित रूप से mootools विधि मिलती है।

लेकिन अगर ऐसा नहीं होता है, तो आप कोशिश करना चाहेंगे

new Event(event).preventDefault();

आईई में, आप उपयोग कर सकते हैं

event.returnValue = false;

एक ही परिणाम प्राप्त करने के लिए।

और त्रुटि प्राप्त करने के क्रम में, आप रोकथाम के अस्तित्व के लिए परीक्षण कर सकते हैं:

if(event.preventDefault) event.preventDefault();

आप दोनों को साथ जोड़ सकते हैं:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);

एफडब्ल्यूआईडब्लू, अगर किसी ने बाद में इस प्रश्न पर फिर से विचार किया है, तो आप यह भी जांच सकते हैं कि आप अपने हैंडलर फ़ंक्शन पर क्या कर रहे हैं।

मैं इस त्रुटि में भाग गया जब मैंने गलती से KeyPress (घटना) पर KeyPress (घटना) पर पारित किया।

जांचने के लिए बस कुछ और।


मुझे फ़ंक्शन चेक के साथ एक विधि द्वारा मदद मिली थी। यह विधि आईई 8 में काम करती है

if(typeof e.preventDefault == 'function'){
  e.preventDefault();
} else {
  e.returnValue = false;
}

यदि आप mootools 'addEvent फ़ंक्शन के माध्यम से ईवेंट को बाध्य करते हैं तो आपके ईवेंट हैंडलर को एक निश्चित (संवर्धित) ईवेंट पैरामीटर के रूप में पारित किया जाएगा। इसमें हमेशा preventDefault () विधि होगी।

घटना बाध्यकारी में अंतर देखने के लिए इस पहेली को आज़माएं। 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>

वहां सभी jQuery उपयोगकर्ताओं के लिए आवश्यक होने पर आप एक ईवेंट को ठीक कर सकते हैं। मान लें कि आपने एचटीएमएल ऑनक्लिक = ".." का उपयोग किया है और आईई विशिष्ट घटना प्राप्त करें जिसमें preventDefault () की कमी है, बस इसे प्राप्त करने के लिए इस कोड का उपयोग करें।

e = $.event.fix(e);

उसके बाद e.preventDefault (); ठीक काम करता है।


preventDefault एक व्यापक मानक है; हर बार जब आप पुराने आईई संस्करणों के साथ अनुपालन करना चाहते हैं तो एक विज्ञापन का उपयोग करना बोझिल है, पॉलीफिल का उपयोग करने के लिए बेहतर है:

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

यह ईवेंट के प्रोटोटाइप को संशोधित करेगा और सामान्य रूप से जावास्क्रिप्ट / डोम की एक महान विशेषता को जोड़ देगा। अब आप किसी समस्या के साथ e.preventDefault उपयोग कर सकते हैं।


if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

आईई 9 और क्रोम पर परीक्षण किया।





preventdefault