ইভেন্ট.প্রিভেন্টডিফল্ট () ফাংশন আইই তে কাজ করছে না


202

নীচে আমার জাভাস্ক্রিপ্ট (মটুলগুলি) কোডটি দেওয়া হয়েছে:

$('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পদ্ধতি নেই যা ত্রুটির কারণ এবং তাই ফর্মটি জমা দেওয়া হচ্ছে। ফায়ারফক্সের ক্ষেত্রে পদ্ধতিটি সমর্থিত (যা আমি ফায়ারব্যাগ ব্যবহার করে খুঁজে পেয়েছি)।

কোন সাহায্য?


এটা করে; ডকস অনুসারে ( mootools.net/docs/core/Native/Event#Event:preventDefault ) তার কী কাজ করা উচিত: "ইভেন্ট পদ্ধতি: প্রতিরোধক ডিফল্ট - ইভেন্টের ডিফল্ট ক্রিয়াটি রোধ করার জন্য ক্রস ব্রাউজার পদ্ধতি।"
পাওলো বার্গান্টিনো

আমার খারাপ, আমি আমার মন্তব্যটি মুছলাম, যা ছিল "ইভেন্ট বন্ধ করার জন্য মটুলগুলির কোনও পদ্ধতি নেই?" সুতরাং8 m ... তে মটুলগুলি নিয়ে সমস্যা আছে ...
অ্যালসিএন্ডে

2
এই সমস্যাটির পুনরুত্পাদন করা যাবে না। এই ফিডলটি "আমার জন্য কাজ করে 8 অর্থাৎ 8" ত্রুটিটি দেখানোর জন্য আপনি কি একটি হ্রাসযুক্ত ফিটল সেটআপ করতে পারবেন? jsfiddle.net
10

উত্তর:


472

আইই, আপনি ব্যবহার করতে পারেন

event.returnValue = false;

একই ফলাফল অর্জন।

এবং কোনও ত্রুটি না পাওয়ার জন্য, আপনি প্রতিরোধ ডিফল্টের অস্তিত্বের জন্য পরীক্ষা করতে পারেন:

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

আপনি দুটি সাথে একত্রিত করতে পারেন:

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

48
নিম্নলিখিত কোডটি আমার পক্ষে কাজ করেছে: যদি (ইভেন্ট.প্রিভেন্টডিফাল্ট) {ইভেন্ট.প্রিভেন্টডিফাল্ট (); } অন্য {ইভেন্ট.returnValue = মিথ্যা; }
এসভি_ইন

229
event.preventDefault ? event.preventDefault() : event.returnValue = false;
মর্তে

31
এটি উল্লেখ করার মতো বিষয় যে "ইভেন্ট" অবশ্যই আই 8 এর বিশ্বব্যাপী ইভেন্ট অবজেক্ট হতে হবে be আপনি ইভেন্ট হ্যান্ডলারের মধ্যে প্রেরিত ইভেন্টটি ব্যবহার করতে পারবেন না, যেমন ইফেরেন্ট ডেফল্ট, আইই 8-তে কাজ করার জন্য এটি অবশ্যই ইভেন্ট.প্রিভেন্টডিফল্ট হওয়া উচিত
jmort253

event.preventDefault();নীল বাদে কোনও কারণে ফায়ারফক্সে আমার জন্য কাজ বন্ধ করে দিয়েছে। মরিটির কোড ব্যবহৃত হয়েছে এবং এটি দুর্দান্ত কাজ করেছে। ধন্যবাদ ~
জেমস

8
কেবল @ jmort253 এর মন্তব্যে কিছু স্পষ্টতা যুক্ত করতে:$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
লুক

23

আপনি যদি মটুলগুলির অ্যাডভেন্ট ফাংশনের মাধ্যমে ইভেন্টটিকে আবদ্ধ করেন তবে আপনার ইভেন্ট হ্যান্ডলারটি প্যারামিটার হিসাবে একটি স্থির (বাড়ানো) ইভেন্টটি পাবে। এটিতে সর্বদা প্রতিরোধের ডিফল্ট () পদ্ধতি থাকবে।

ইভেন্ট বাইন্ডিংয়ের পার্থক্যটি দেখতে এই মিতালটি ব্যবহার করে দেখুন 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 ব্যবহারকারীদের জন্য আপনি যখন প্রয়োজন একটি ইভেন্ট ঠিক করতে পারেন। বলুন যে আপনি এইচটিএমএল অনক্লিক = ".." ব্যবহার করেছেন এবং একটি আইআই নির্দিষ্ট ইভেন্ট পান যা প্রতিরোধ ডিফল্ট () এর অভাব রয়েছে, এটি পেতে এই কোডটি ব্যবহার করুন।

e = $.event.fix(e);

এর পরে e.preventDefault (); ঠিকভাবে কাজ করে.


2
দুর্ভাগ্যক্রমে এই কৌশলটি আমার পক্ষে কাজ করছে না। আমি আই 10 ব্যবহার করছি এবং e.preventDefault () কল করার আগে; আমি ক্যাম কল করছি e .event.fix (e); কোনও সাফল্য ছাড়াই :(
বিটলস 1692

এটি jquery 2 থেকে সরানো হতে পারে? তবে আই 10 এর ফিক্সের দরকার নেই।
ওল্ড উইজার্ড

আপনি কি আবার ই-ভেরিয়েবলের স্থির ইভেন্টটি বরাদ্দ করলেন?
ওল্ড উইজার্ড

11

আমি জানি এটি বেশ পুরানো পোস্ট তবে আমি IE8 এ এই কাজটি করার চেষ্টা করার জন্য কিছুটা সময় ব্যয় করেছি।

এটি আই 88 সংস্করণে কিছু পার্থক্য রয়েছে বলে মনে হয় কারণ সমাধান এখানে পোস্ট করা হয়েছে এবং অন্যান্য থ্রেডগুলি আমার পক্ষে কাজ করে নি।

আসুন আমরা বলি যে আমাদের এই কোডটি রয়েছে:

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

আমার আইই 8 preventDefault()পদ্ধতিতে jQuery এর কারণে বিদ্যমান, তবে কাজ করছে না (সম্ভবত নীচের পয়েন্টের কারণে), সুতরাং এটি ব্যর্থ হবে।

এমনকি যদি আমি returnValueসম্পত্তি সরাসরি মিথ্যাতে সেট করি :

$('a').on('click', function(event) {
    event.returnValue = false;
    event.preventDefault();
});

এটিও কাজ করবে না, কারণ আমি কেবল jQuery কাস্টম ইভেন্ট অবজেক্টের কিছু সম্পত্তি সেট করেছি set

আমার জন্য কাজ করা একমাত্র সমাধান সম্পত্তি সেট করা set returnValue এর বিশ্বব্যাপী পরিবর্তনশীল event ভালো:

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

যে কেউ IE8 কে কাজ করতে রাজি করার চেষ্টা করবে তার পক্ষে এটি আরও সহজ করার জন্য। আমি আশা করি শিগগিরই আইই 8 বেদনাদায়ক মৃত্যুতে ভয়াবহভাবে মারা যাবে।

হালনাগাদ:

যেমন sv_in উল্লেখ করেছে, আপনি event.originalEventআসল ইভেন্ট অবজেক্ট পেতে এবং মূলটিতেreturnValue সম্পত্তি সেট করতে ব্যবহার করতে পারেন । তবে আমি এখনও আমার আইই 8 তে এটি পরীক্ষা করে দেখিনি।


1
আপনি আসল ব্রাউজার ইভেন্ট অবজেক্টটি থেকেও পেতে পারেন event.originalEvent। আরো তথ্য: stackoverflow.com/a/16675056/22550
sv_in

6

মটুলগুলি ইভেন্ট অবজেক্টগুলিতে ডিফল্টকে পুনরায় সংজ্ঞা দেয়। সুতরাং আপনার কোডটি প্রতিটি ব্রাউজারে সূক্ষ্মভাবে কাজ করা উচিত। যদি এটি না হয়, তবে মটুলগুলিতে ie8 সমর্থন নিয়ে একটি সমস্যা আছে।

আপনি কি আপনার কোডটি ie6 এবং / অথবা ie7 তে পরীক্ষা করেছেন?

ডক বলেছেন

অ্যাডএভেন্টের সাথে যুক্ত প্রতিটি ইভেন্ট ম্যানুয়ালি উদাহরণ না দিয়েই স্বয়ংক্রিয়ভাবে মটুলগুলি পদ্ধতি পায় gets

তবে যদি এটি না ঘটে তবে আপনি চেষ্টা করতে পারেন

new Event(event).preventDefault();

1
আই-তেও এইভাবে মোড়ানো করার সময় কিছু সমস্যা হয়েছিল। হে ভগবান! আইই কেন?
এসভি_ইন

তিনি এই ইভেন্টটি থামাতে চান না, যদিও কেবল এটির ডিফল্ট ক্রিয়াটি প্রতিরোধ করুন।
অ্যালসিএন্ডে

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

আইই 9 এবং ক্রোমে পরীক্ষিত।


2
আইই ১১-তে কাজ করে না (উদাঃ ডেভল্ট একটি ফাংশন, যদিও এটি কিছু করে বলে মনে হচ্ছে না)
গ্রেজিজ

4

IE9 এর পরে একটি কীবোর্ড কী অক্ষম করতে, ব্যবহার করুন: e.preventDefault();

আই 7/8 এর অধীনে নিয়মিত কীবোর্ড কী অক্ষম করতে , ব্যবহার করুন: e.returnValue = false;বাreturn false;

আপনি যদি কীবোর্ড শর্টকাটটি অক্ষম করার চেষ্টা করেন (সিটিআরএল সহ, পছন্দ করুন 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-তে কীবোর্ড শর্টকাটগুলি অক্ষম করবেন


আপনি মাথার পেরেকটি আঘাত করার একমাত্র উত্তরদাতা। এখানে যে কেউ প্রাথমিক IE সম্পর্কে কথা বলার একমাত্র কারণ হ'ল তাদের ক্রস প্ল্যাটফর্মের কার্যকারিতা প্রয়োজন। "e.keyCode = 0;" আইই এর প্রথম দিকে যে কোনও ডিফল্ট ক্রিয়াটি মেরে ফেলবে।
www-0av-Com

3

এখানে আমি jquery 1.3.2 এবং 09-18-2009 এর নাইট বিল্ড দিয়ে পরীক্ষা করছি function এটির সাথে আপনার ফলাফলগুলি আমাকে জানান। ওএসএক্স-এ সাফারি, এফএফ, অপেরাতে সবকিছু শেষ হয়। এটি একচেটিয়াভাবে সমস্যাযুক্ত IE8 বাগ ঠিক করার জন্য এবং এর অনিচ্ছাকৃত ফলাফল থাকতে পারে:

function ie8SafePreventEvent(e) {
    if (e.preventDefault) {
        e.preventDefault()
    } else {
        e.stop()
    };

    e.returnValue = false;
    e.stopPropagation();
}

ব্যবহার:

$('a').click(function (e) {
    // Execute code here
    ie8SafePreventEvent(e);
    return false;
})

1
আমি এই stopপদ্ধতিটি আগে কখনও দেখিনি , এবং এটি এমএসডিএন-তে খুঁজে পাইনি। এটার কাজ কি?
ওরিওল

1
.stop()একটি ব্যতিক্রম ছোঁড়ে, কারণ এটি বিদ্যমান নেই। যে কোনও ব্যতিক্রম কাঙ্ক্ষিত প্রভাব ফেলবে।
জে বাজুজি

এবং কেন আপনি একটি ব্যতিক্রম নিক্ষেপ করতে চান? মানে, যদি আপনি কোনও ব্যতিক্রম ছুঁড়তে চান তবে আপনি কেবল কারণটিকে কল করতে পারেন তবে e.preventDefault()যেভাবেই হোক ব্যতিক্রম ছুঁড়ে মারতে পারেন ...
ম্যাথিয়াস বার্গার

2

preventDefaultএকটি বিস্তৃত মান; আপনি যখনই পুরানো আই ভার্সনের সাথে অনুগত হতে চান প্রতিটি সময় অ্যাডহক ব্যবহার করা জটিল, একটি পলিফিল ব্যবহার করা আরও ভাল:

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

এটি ইভেন্টের প্রোটোটাইপটি সংশোধন করবে এবং সাধারণভাবে জাভাস্ক্রিপ্ট / ডিওএমের একটি দুর্দান্ত বৈশিষ্ট্য এই ফাংশনটি যুক্ত করবে। এখন আপনি e.preventDefaultকোনও সমস্যা ছাড়াই ব্যবহার করতে পারেন ।


0

return false আপনার শ্রোতার মধ্যে সমস্ত ব্রাউজারে কাজ করা উচিত।

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

0

এফডব্লিউআইডাব্লু, পরে যদি কেউ এই প্রশ্নটি পুনর্বিবেচনা করে তবে আপনি আপনার অন কিপিস হ্যান্ডলারের ফাংশনে কী দিচ্ছেন তাও পরীক্ষা করতে পারেন।

আমি ভুলক্রমে অনকাইপ্রেস (ইভেন্ট) এর পরিবর্তে অন কীপ্রেস (এটি) পাস করার সময় আমি এই ত্রুটিটির মধ্যে পড়েছিলাম।

পরীক্ষা করার জন্য আরও কিছু।


0

একটি ফাংশন চেক দিয়ে আমাকে একটি পদ্ধতিতে সহায়তা করেছিল। এই পদ্ধতি আইই 8 তে কাজ করে

if(typeof e.preventDefault == 'function'){
  e.preventDefault();
} else {
  e.returnValue = false;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.