Evt.preventDefault () এর বিপরীতটি কী;


184

একবার আমি বরখাস্ত হয়ে গেলে, আমি evt.preventDefault()কীভাবে আবার ডিফল্ট ক্রিয়াকলাপগুলি আবার শুরু করতে পারি?


3
আমি মনে করি সাধারণত আপনার ফাংশনটি চলবে এবং তারপরে ডিফল্ট আচরণটি চলবে, সুতরাং আপনি কখনই প্রথম জায়গায় evt.preventDefault () কল করবেন না
প্রেসকোট

1
সম্ভাব্য সদৃশ? : stackoverflow.com/questions/1551389/…
নোবিটা

2
@ নোবিতা - আমি এতটা নিশ্চিত নই ... যেটি জিকুয়েরির সাথে নির্দিষ্ট।
গিলি 3

1
বাহ, দ্রুত প্রতিক্রিয়া জন্য থেক্স! যদিও আমার সমস্যাটি হ'ল যে আমিই evt.preventDefault (); গুলি চালাচ্ছি না। আমি একটি লাইটবক্সে একটি তৃতীয় পক্ষের ফ্ল্যাশ অ্যাপ্লিকেশন চালাচ্ছি। আমি যখন লাইটবক্সটি বন্ধ করি, পৃষ্ঠার স্ক্রোলিংয়ের জন্য আমার মাউসওয়েলটি কোনওভাবে বন্ধ হয়ে যায়। কিছু গবেষণা করার সময়, আমি আবিষ্কার করেছি যে এই ফ্ল্যাশ অ্যাপটি একটি জুম বৈশিষ্ট্যের কারণে পৃষ্ঠা স্ক্রোলিং অক্ষম করে। তাই এখন আমি অ্যাপটি বন্ধ হয়ে গেলে পৃষ্ঠা স্ক্রোলিং পুনরায় শুরু করার চেষ্টা করছি। হয়তো মাউস হুইল ইভেন্টটি আবার শুরু করার জন্য কল করতে পারি এমন কোনও পদ্ধতি আছে?
ব্রায়ান

উত্তর:


90

@ প্রেসকোটের মন্তব্য অনুসারে, এর বিপরীত:

evt.preventDefault();

হতে পারে:

মূলত 'ডিফল্ট করুন' তে সমীকরণ করা হয় , যেহেতু আমরা আর এটিকে আটকাচ্ছি না।

অন্যথায় আমি আপনাকে অন্য মন্তব্য এবং জবাব সরবরাহিত উত্তরগুলিতে নির্দেশ করতে আগ্রহী:

ইভেন্ট.প্রিভেন্টডেফল্ট () (jQuery ব্যবহার করে) বলছে এমন শ্রোতাকে কীভাবে আনবাইন্ড করবেন?

কীভাবে পুনর্ব্যবহারযোগ্য ইভেন্ট.প্রিভেন্টডিফল্ট?

মনে রাখবেন যে রেডস্কয়ার দ্বারা প্রদত্ত উদাহরণ সমাধানের সাথে দ্বিতীয়টি গ্রহণ করা হয়েছে (এটি নকল হিসাবে বন্ধ না হলে সরাসরি সমাধানের জন্য এখানে পোস্ট করা হয়েছে):

$('form').submit( function(ev) {
     ev.preventDefault();
     //later you decide you want to submit
     $(this).unbind('submit').submit()
});

1
এইটি আমার সমস্যাটিকে পুরোপুরি সমাধান করেছে। এই স্নিপেট সরবরাহ করার জন্য ধন্যবাদ!
জর্ডন ডেভিডসন

ধন্যবাদ! এই সম্পর্কে কিছুক্ষণের জন্য আমার মাথার চুল আঁচড়ানো ছিল (একটি ফর্ম জমা দেওয়ার আগে আমাকে কিছু জিনিস থামানো এবং চেক করা দরকার, নির্দিষ্ট পরিস্থিতিতে সাবমিট না করা, অন্যের কাছে জমা দেওয়া) I
কাঠারিন ওসবার্ন

1
এটি কাজ করে তবে আমি বুঝতে পারি না কেন পরবর্তী ফর্মটি আবার ফাংশনটি কল করে, আমি ভেবেছিলাম এটি অবশ্যই বন্ধ করে দেওয়া হবে, তবে দেখে মনে হচ্ছে এটি কেবল বর্তমান কলের জন্য আবদ্ধ নয় ... আমি এটি ব্যাখ্যা করতে পারি না, এটি করে ঠিক আমি যা চাই তা কিন্তু আমি যা প্রত্যাশা করতাম তা নয়।
ভাদোরকোয়েস্ট

1
একটি চতুর এবং দ্রুত সমাধান। এটি ভালবাসা :)
আহমদনাওয়াজবুত

53
function(evt) {evt.preventDefault();}

এবং এর বিপরীত

function(evt) {return true;}

চিয়ার্স!


8
এটি আমার পক্ষে কাজ করেছিল, তবে আমি ভাবছি যে কেউ যদি এটির আরও ভাল ব্যাখ্যা করতে পারে তবে কেন?

11
এটি ডিফল্ট () প্রতিরোধকে পূর্বাবস্থায় ফেরাবে না, বাস্তবে এটি একইরকম হয় যেন আপনি বাদ দিতে পারেন return true: কিছুই না।
br4nnigan

19

clickJQuery এ ইভেন্ট থেকে একটি লিঙ্ক চালিয়ে যাওয়ার আগে একটি কমান্ড প্রক্রিয়া করতে :

উদাহরণ: <a href="http://google.com/" class="myevent">Click me</a>

JQuery এর মাধ্যমে প্রতিরোধ এবং অনুসরণ করুন:

$('a.myevent').click(function(event) {
    event.preventDefault();

    // Do my commands
    if( myEventThingFirst() )
    {
      // then redirect to original location
      window.location = this.href;
    }
    else
    {
      alert("Couldn't do my thing first");
    }
});

অথবা কেবল এর window.location = this.href;পরে চালানpreventDefault();


3
ঠিক আছে, তবে এটি ধরে নিয়েছে যে প্রতিরোধক ডিফল্ট একটি লিঙ্ক, এবং নথির বডিতে টাচমোভ না বলে।
ব্যাংককিয়ান

4
এটি প্রশ্নটি জিজ্ঞাসা করে না।
ম্যাট ফ্লেচার

8

অ্যাসিঙ্ক্রোনাস কল কার্যকর করতে আমাকে jQuery এ একটি ফর্ম জমা দিতে বিলম্ব করতে হয়েছিল। সরলীকৃত কোডটি এখানে ...

$("$theform").submit(function(e) {
    e.preventDefault();
    var $this = $(this);
    $.ajax('/path/to/script.php',
        {
        type: "POST",
        data: { value: $("#input_control").val() }
    }).done(function(response) {
        $this.unbind('submit').submit();
    });
});

এই দৃশ্যের আর একটি বিকল্প হতে পারে ইনপুট টাইপ = "বোতাম" ব্যবহার করা এবং ইনপুট টাইপ = "জমা দিন" ব্যবহার করার পরিবর্তে ক্লিক ইভেন্টের সাথে আবদ্ধ হওয়া এবং জমা দেওয়া ইভেন্টের সাথে বাঁধাই।
স্ট্রাইক্সি

8

ঠিক আছে ! এটি ক্লিক ইভেন্টের জন্য কাজ করে:

$("#submit").click(function(e){ 

   e.preventDefault();

  -> block the click of the sumbit ... do what you want

$("#submit").unbind('click').click(); // the html click submit work now !

});


4

আমি নিম্নলিখিত প্যাটার্ন সুপারিশ করব:

document.getElementById("foo").onsubmit = function(e) {
    if (document.getElementById("test").value == "test") {
        return true;
    } else {
        e.preventDefault();
    }
}

<form id="foo">
    <input id="test"/>
    <input type="submit"/>
</form>

... যদি না আমি কিছু মিস করছি

http://jsfiddle.net/DdvcX/


4

আপনি যখন ফোন করবেন তখন event.preventDefault()প্রথমে আপনাকে কী করতে হবে তা কেন আগে খতিয়ে দেখতে হবে তা বোঝার কোনও বিপরীত পদ্ধতি event.preventDefault()নেই।

হুডের নীচে, ডিফল্ট প্রতিরোধের কার্যকারিতা মূলত একটি রিটার্নকে মিথ্যা বলে যা আরও কার্যকরভাবে থামায়। আপনি যদি জাভাস্ক্রিপ্টের পুরানো উপায়গুলির সাথে পরিচিত হন তবে ফর্ম সাবমিট এবং বোতাম বোতামের মতো ইভেন্টগুলি বাতিল করার জন্য রিটার্ন মিথ্যা ব্যবহার করা ফ্যাশনে একবার সত্য ব্যবহারের আগে (jQuery এর আশেপাশেও ছিল)।

আপনি সম্ভবত উপরের সাধারণ ব্যাখ্যাটির ভিত্তিতে ইতিমধ্যে কাজ করেছেন: বিপরীত event.preventDefault()কিছুই নয় nothing আপনি কেবল ইভেন্টটি আটকাবেন না, ডিফল্টরূপে ব্রাউজারটি ইভেন্টটিকে আটকাতে না পারলে মঞ্জুরি দেবে।

ব্যাখ্যার জন্য নীচে দেখুন:

;(function($, window, document, undefined)) {

    $(function() {
        // By default deny the submit
        var allowSubmit = false;

        $("#someform").on("submit", function(event) {

            if (!allowSubmit) {
                event.preventDefault();

                // Your code logic in here (maybe form validation or something)
                // Then you set allowSubmit to true so this code is bypassed

                allowSubmit = true;
            }

        });
    });

})(jQuery, window, document);

উপরের কোডে আপনি লক্ষ্য করবেন যে আমরা অনুমতি দিচ্ছি সাবমিটটি মিথ্যা কিনা তা পরীক্ষা করে দেখছি। এর অর্থ আমরা আমাদের ফর্মটি ব্যবহার করে জমা দেওয়া থেকে বিরত করব event.preventDefaultএবং তারপরে আমরা কিছু বৈধতা যুক্তি করব এবং যদি আমরা খুশি থাকি তবে সাবমিটসমিটকে সত্য হিসাবে সেট করুন।

এর বিপরীতে কাজ করার এটিই একমাত্র কার্যকর পদ্ধতি event.preventDefault()- আপনি ইভেন্টগুলি অপসারণের চেষ্টাও করতে পারেন যা মূলত একই জিনিসটি অর্জন করবে।


4

এখানে দরকারী কিছু ...

সবার আগে আমরা লিঙ্কটিতে ক্লিক করব, কিছু কোড চালাব এবং এর চেয়ে আমরা ডিফল্ট ক্রিয়া করব। এটি ইভেন্ট ক্রন্টের টার্গেট ব্যবহার করে সম্ভব হবে একবার দেখুন। এখানে আমরা একটি নতুন ট্যাবে গুগল অ্যাক্সেস করার চেষ্টা করব, তবে এর আগে আমাদের কিছু কোড চালানো দরকার।

<a href="https://www.google.com.br" target="_blank" id="link">Google</a>

<script type="text/javascript">
    $(document).ready(function() {
        $("#link").click(function(e) {

            // Prevent default action
            e.preventDefault();

            // Here you'll put your code, what you want to execute before default action
            alert(123); 

            // Prevent infinite loop
            $(this).unbind('click');

            // Execute default action
            e.currentTarget.click();
        });
    });
</script>

2

এটি আমি এটি সেট করতে ব্যবহৃত:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});

এবং এটিকে পূর্বাবস্থায় ফেরাতে:

$("body").unbind("touchmove");

2

কোনও সমাধান এখানে আমাকে সহায়তা করেনি এবং আমি আমার পরিস্থিতি সমাধানের জন্য এটি করেছি did

<a onclick="return clickEvent(event);" href="/contact-us">

এবং ফাংশন clickEvent(),

function clickEvent(event) {
    event.preventDefault();
    // do your thing here

    // remove the onclick event trigger and continue with the event
    event.target.parentElement.onclick = null;
    event.target.parentElement.click();
}

2

আমি মনে করি "বিপরীত" কোনও ইভেন্টের অনুকরণ করা হবে। আপনি ব্যবহার করতে পারেন.createEvent()

মজিলার উদাহরণ অনুসরণ করা:

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("checkbox"); 
  var cancelled = !cb.dispatchEvent(evt);
  if(cancelled) {
    // A handler called preventDefault
    alert("cancelled");
  } else {
    // None of the handlers called preventDefault
    alert("not cancelled");
  }
}

রেফ: ডকুমেন্ট.ক্রেটএভেন্ট


jQuery এর রয়েছে .trigger()যাতে আপনি উপাদানগুলিতে ইভেন্টগুলি ট্রিগার করতে পারেন - কখনও কখনও দরকারী।

$('#foo').bind('click', function() {
      alert($(this).text());
});

$('#foo').trigger('click');

1

jquery অন ​​() এর আর একটি সমাধান হতে পারে। এস্কেপ্যাসিয়ালি যখন এটি নেমস্পেসের ব্যবহারের কথা আসে ।

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

$( selector ).on("submit.my-namespace", function( event ) {
    //prevent the event
    event.preventDefault();

    //cache the selector
    var $this = $(this);

    if ( my_condition_is_true ) {
        //when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
        $this.off("submit.my-namespace").trigger("submit");
    }
});

এখন নেমস্পেসের ব্যবহারের সাথে আপনি এই ইভেন্টগুলির একাধিক সংখ্যক যোগ করতে পারেন এবং আপনার প্রয়োজনের উপর নির্ভর করে সেগুলি মুছে ফেলতে সক্ষম হবেন .. যদিও জমা দেওয়ার সর্বোত্তম উদাহরণ নাও হতে পারে, এটি কোনও ক্লিক বা কীপ্রেস বা যা কিছু কাজে আসে ..


1

এটি প্রশ্নের সরাসরি উত্তর নয় তবে এটি কারও সাহায্য করতে পারে। আমার বক্তব্যটি হ'ল আপনি কেবলমাত্র কিছু অবস্থার উপর ভিত্তি করে প্রিভেনডেফল্ট () কল করুন কারণ আপনি যদি সমস্ত ক্ষেত্রে কেইনডেফাল্ট () কল করেন তবে কোনও ইভেন্ট হওয়ার কোনও মানে নেই। সুতরাং যদি শর্ত থাকে এবং কন্ডিশন ডিফল্ট () কে কল করা হয় তবেই যখন শর্তটি সন্তুষ্ট হয় অন্য ক্ষেত্রেগুলির জন্য স্বাভাবিকভাবে ফাংশনটি কাজ করবে।

$('.btnEdit').click(function(e) {

   var status = $(this).closest('tr').find('td').eq(3).html().trim();
   var tripId = $(this).attr('tripId');

  if (status == 'Completed') {

     e.preventDefault();
     alert("You can't edit completed reservations");

 } else if (tripId != '') {

    e.preventDefault();
    alert("You can't edit a reservation which is already attached to a trip");
 }
 //else it will continue as usual

});


0

আপনি "প্রতিরোধক ডিফল্ট" পদ্ধতির পরে এটি ব্যবহার করতে পারেন

// এখানে evt.target রিটার্ন ডিফল্ট ইভেন্ট (উদা: ডিফল্ট url ইত্যাদি)

var defaultEvent=evt.target;

// এখানে আমরা ডিফল্ট ইভেন্ট সংরক্ষণ করি ..

if("true")
{
//activate default event..
location.href(defaultEvent);
}

0

আপনি সর্বদা আপনার স্ক্রিপ্টের কিছু ক্লিক ইভেন্টের সাথে সংযুক্ত এটি ব্যবহার করতে পারেন:

location.href = this.href;

ব্যবহারের উদাহরণটি হ'ল:

jQuery('a').click(function(e) {
    location.href = this.href;
});

-1

এই কোডটি আমার ব্যবহারের পরে ইভেন্টটি পুনরায় ইনস্ট্যান্ট করার জন্য কাজ করেছিল:

event.preventDefault(); to disable the event.


event.preventDefault = false;

-2

আমি নিম্নলিখিত কোড ব্যবহার করেছি। এটা আমার জন্য ভালই কাজ করে।

$('a').bind('click', function(e) {
  e.stopPropagation();
});

2
JQuery এপিআই ডকুমেন্টেশনে যেমন ব্যাখ্যা করা হয়েছে , এটি ইভেন্টটিকে ডোম গাছটি বুদবুদ করা থেকে বাধা দেয়, কোনও অভিভাবক হ্যান্ডলারকে ইভেন্টটি সম্পর্কে অবহিত হতে বাধা দেয়। এটি / বা এর বিপরীত হিসাবে একই নয় event.preventDefault();
5

2
এটিই প্রশ্নটি জিজ্ঞাসা করেছিল।
ম্যাট ফ্লেচার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.