programing

event.preventDefault를 다시 활성화하는 방법?

lastcode 2023. 10. 4. 21:58
반응형

event.preventDefault를 다시 활성화하는 방법?

모든 제출 단추에서 기본 작업을 방지한 웹 페이지가 있지만 단추에서 기본 제출 작업을 다시 활성화하려면 어떻게 해야 합니까?

현재 다음을 사용하여 기본 작업을 방지하고 있습니다.

$("form").bind("submit", function(e){
e.preventDefault();
});

다음을 사용하여 이 작업을 성공적으로 수행했습니다.

$(document).ready(function(){
$("form:not('#press')").bind("submit", function(e){
e.preventDefault();
});

그런데 버튼을 클릭하면 동적으로 할 수 있는 건가요?

이벤트를 바인딩 해제하고 Default를 방지하지 않는 별도의 이벤트로 바인딩하거나 바인딩 해제 후 메서드에서 기본 이벤트를 직접 호출해야 합니다.마법 같은 이벤트는 없습니다. cancelled= false;

요청하신 대로

 $('form').submit( function(ev){

         ev.preventDefault();

         //later you decide you want to submit
         $(this).unbind('submit').submit()

  });

이 코드로 빨간색 사각형이 제안하는 것을 수행하는 경우:

function preventDefault(e) {
    e.preventDefault();
}
$("form").bind("submit", preventDefault);

// later, now switching back
$("form#foo").unbind("submit", preventDefault);

또는 제출이 허용될 때마다 양식 속성을 할당합니다.이와 같은 것:

function preventDefault(e) {
    if (event.currentTarget.allowDefault) {
        return;
    }
    e.preventDefault();
}
$("form").bind("submit", preventDefault);

// later, now allowing submissions on the form
$("form#foo").get(0).allowDefault = true;
function(e){ e.preventDefault();

그리고 그 반대.

function(e){ return true; }

건배!

$('form').submit( function(e){

     e.preventDefault();

     //later you decide you want to submit
     $(this).trigger('submit');     or     $(this).trigger('anyEvent');

비동기 액션(timer, ajax)을 사용하면 속성을 재정의할 수 있습니다.isDefaultPrevented다음과 같이:

$('a').click(function(evt){
  e.preventDefault();

  // in async handler (ajax/timer) do these actions:
  setTimeout(function(){
    // override prevented flag to prevent jquery from discarding event
    evt.isDefaultPrevented = function(){ return false; }
    // retrigger with the exactly same event data
    $(this).trigger(evt);
  }, 1000);
}

이것은 정확히 동일한 데이터로 이벤트를 다시 트리거하는 가장 완벽한 방법입니다.

저도 최근에 비슷한 문제가 있었습니다.폼과 PHP 기능을 가지고 있었는데 폼이 제출되면 실행됩니다.하지만 자바스크립트를 먼저 실행해야 했습니다.

        // This variable is used in order to determine if we already did our js fun
        var window.alreadyClicked = "NO"
        $("form:not('#press')").bind("submit", function(e){
            // Check if we already run js part
            if(window.alreadyClicked == "NO"){
                // Prevent page refresh
                e.preventDefault();
                // Change variable value so next time we submit the form the js wont run
                window.alreadyClicked = "YES"
                // Here is your actual js you need to run before doing the php part
                xxxxxxxxxx

                // Submit the form again but since we changed the value of our variable js wont be run and page can reload (and php can do whatever you told it to)
                $("form:not('#press')").submit()
            } 
        });

다음을 추가하여 작업을 다시 활성화할 수 있습니다.

this.delegateEvents();  // Re-activates the events for all the buttons

backbone js 뷰의 렌더 기능에 추가하면 필요에 따라 event.preventDefault()를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1164132/how-to-reenable-event-preventdefault

반응형