Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript evt.preventDefault()的反面是什么;_Javascript_Jquery_Preventdefault - Fatal编程技术网

Javascript evt.preventDefault()的反面是什么;

Javascript evt.preventDefault()的反面是什么;,javascript,jquery,preventdefault,Javascript,Jquery,Preventdefault,一旦我启动了一个evt.preventDefault(),我如何才能再次恢复默认操作?我认为“相反”应该是模拟一个事件。您可以使用.createEvent() 以Mozilla为例: function simulateClick() { var evt = document.createEvent("MouseEvents"); evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false,

一旦我启动了一个
evt.preventDefault()
,我如何才能再次恢复默认操作?

我认为“相反”应该是模拟一个事件。您可以使用
.createEvent()

以Mozilla为例:

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');

根据@Prescott的评论,与以下相反:

evt.preventDefault();
可以是:

本质上等同于“默认”,因为我们不再阻止它

否则,我倾向于向您指出其他评论和答案提供的答案:

请注意,第二个已被redsquare给出的示例解决方案所接受(此处发布的是直接解决方案,以防该解决方案未作为副本关闭):


我建议采取以下模式:

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>
document.getElementById(“foo”).onsubmit=function(e){
if(document.getElementById(“test”).value==“test”){
返回true;
}否则{
e、 预防默认值();
}
}
…除非我遗漏了什么

与此相反

function(evt) {return true;}

干杯

为了执行异步调用,我不得不延迟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();
    });
});
您可以在“preventDefault”方法之后使用此方法

//此处evt.target返回默认事件(例如:默认url等)

//这里我们保存默认事件

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

要在继续链接之前处理命令,请单击jQuery中的
事件:

例如:

防止并通过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()之后

我使用了以下代码。这对我来说很好

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

好的!它适用于单击事件:

$("#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 !

});
jquery可能是另一种解决方案。当涉及到使用时,暂时停止

jquery on()只是绑定事件的当前方式(而不是绑定()。off()用于解开这些。当您使用名称空间时,可以添加和删除多个不同的事件

$( 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");
    }
});

现在,通过使用名称空间,您可以添加多个事件,并且可以根据需要删除这些事件。。虽然submit可能不是最好的示例,但它可能在单击或按键或其他任何操作时派上用场。

您始终可以在脚本中的某个单击事件中使用它:

location.href = this.href;
用法示例如下:

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

在我使用以下代码后,该代码对我重新实例化事件起到了作用:

event.preventDefault(); to disable the event.


event.preventDefault = false;

这是我用来设置的:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});
要撤销它:

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

event.preventDefault()
没有相反的方法来理解为什么在调用它时必须首先研究
event.preventDefault()
的作用

在引擎盖下面,preventDefault的功能本质上是调用一个返回false,它停止任何进一步的执行。如果您熟悉Javascript的老方法,那么使用return false取消表单提交和使用return true(甚至在jQuery出现之前)按钮上的事件曾经是一种时尚

正如您可能已经根据上面的简单解释得出的那样:
event.preventDefault()
的反面什么都不是。您只是不阻止该事件,默认情况下,如果您不阻止该事件,浏览器将允许该事件

请参见下面的解释:

;(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);
在上面的代码中,您会注意到我们正在检查allowSubmit是否为false。这意味着我们将使用
event.preventDefault
阻止表单提交,然后我们将执行一些验证逻辑,如果我们愿意,将allowSubmit设置为true


这确实是唯一一种与
事件相反的有效方法。preventDefault()
–您也可以尝试删除事件,这基本上可以实现相同的效果。

这里有一些有用的东西

首先,我们将单击链接,运行一些代码,然后执行默认操作。这可以使用事件实现。currentTarget查看。在这里,我们将尝试在一个新的标签上访问Google,但在我们需要运行一些代码之前

<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>

$(文档).ready(函数(){
$(“#链接”)。单击(功能(e){
//防止默认操作
e、 预防默认值();
//在这里,您将放置您的代码,在默认操作之前要执行的内容
警报(123);
//防止无限循环
$(this.unbind('click');
//执行默认操作
e、 currentTarget.click();
});
});
与之相对的(标准):

资料来源:
这里没有一个解决方案对我有帮助,我这样做是为了解决我的问题

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

这不是对这个问题的直接回答,但它可能会帮助某些人。我的观点是,您只能根据某些条件调用preventDefault(),因为如果您对所有情况都调用preventDefault(),则没有必要发生事件。因此,使用if条件并仅在满足条件时调用preventDefault()将以通常的方式在其他情况下使用函数

$('.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

});

在同步流中,只有在需要时才调用
e.preventDefault()

a_link.addEventListener('click', (e) => {
   if( conditionFailed ) {
      e.preventDefault();
      // return;
   }

   // continue with default behaviour i.e redirect to href
});
在异步流中,有许多方法,但最常见的是使用
窗口。位置

a_link.addEventListener('click', (e) => {
     e.preventDefault(); // prevent default any way

     const self = this;

     call_returning_promise()
          .then(res => {
             if(res) {
               window.location.replace( self.href );
             }
          });
});

您可以通过使用
async
-
wait

确保上述流同步。我认为通常情况下,您的函数会运行,然后默认行为会运行,因此您不会首先调用evt.preventDefault()。可能的重复是:@大雄-我不太确定。。。这是jQuery特有的。哇,谢谢你的快速回复!但我的问题是,我不是启动evt.preventDefault()的人;。我正在lightbox中运行第三方flash应用程序。当我关闭灯箱时,我滚动页面的鼠标滚轮不知怎的停止了。做某事
event.returnValue = true;
<a onclick="return clickEvent(event);" href="/contact-us">
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();
}
$('.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

});
a_link.addEventListener('click', (e) => {
   if( conditionFailed ) {
      e.preventDefault();
      // return;
   }

   // continue with default behaviour i.e redirect to href
});
a_link.addEventListener('click', (e) => {
     e.preventDefault(); // prevent default any way

     const self = this;

     call_returning_promise()
          .then(res => {
             if(res) {
               window.location.replace( self.href );
             }
          });
});