Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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 preventDefault函数:真正的实用程序是什么?_Javascript_Jquery - Fatal编程技术网

Javascript preventDefault函数:真正的实用程序是什么?

Javascript preventDefault函数:真正的实用程序是什么?,javascript,jquery,Javascript,Jquery,我是jquery的新手,看到了一段代码,其中包含了一个方法的功能,即“preventDefault”。为了测试,我创建了一个测试页面,并创建了两个函数,其中包含“preventDefault” 我有两个关于同一主题的问题,希望你能回答我 $(document).ready( function( ) { $('a').click( function( event ) {//Func 1 event.preventDefault( ); }); $("#ok

我是jquery的新手,看到了一段代码,其中包含了一个方法的功能,即“preventDefault”。为了测试,我创建了一个测试页面,并创建了两个函数,其中包含“preventDefault”

我有两个关于同一主题的问题,希望你能回答我

$(document).ready( function( ) {
    $('a').click( function( event ) {//Func 1
        event.preventDefault( );
    });

    $("#ok").click( function( event ) {//Func 2
        event.preventDefault( );
        alert("Wut");
        //...
    });
});
1-为什么在第二个函数中,即使我注释了“event.preventDefault();”,也会运行“alert()”,而第一个函数不会发生相同的情况?如果我在第一个函数中注释“event.preventDefault();”,则链接无效! 我发现这很奇怪,因为不管第二个函数中是否使用了“event.preventDefault();”方法,“alert”的工作方式是相同的。我认为即使是“警报”之后的内容也会运行

2-此方法的真正实用程序“event.preventDefault();”是什么?为什么,在第二个函数中,它似乎是无用的。你能给我举一些什么时候有用的例子吗

谢谢

函数
.preventDefault()
阻止浏览器执行交互元素的正常隐式行为。如果单击
标记,那么除了JavaScript所做的任何事情之外,浏览器将尝试跟随“href”值并重新加载页面。这是函数名所指的“默认”行为

运行
alert()
是因为
.preventDefault()
与事件处理程序中的代码无关。如果要“中止”事件处理程序,只需从它返回

请注意,jQuery还提供了
.stopPropagation()
.stoppimediatepropagation()
来取消事件冒泡过程。这些对事件处理程序中的代码也没有直接影响。

的目的是防止浏览器执行与事件相关的默认操作。您的
警报
不是浏览器的默认操作,不受影响。跟随链接是浏览器的默认操作,因此阻止默认操作会阻止跟随链接

preventDefault
在许多情况下都是至关重要的。例如,在处理表单的
submit
事件时,如果我们执行客户端表单验证而表单无效,则需要
preventDefault
(直接或间接);否则,浏览器将提交无效表单

(我上面说的“直接或间接”,是因为jQuery以一种特殊的方式处理事件处理程序的返回值:如果您返回
false
,它将为您调用
preventDefault
stopPropagation

它阻止控件的默认操作。如果它是一个链接,它将停止跟踪该链接。如果是表单提交,则会阻止表单提交

它不会与同一元素上的其他JS事件处理程序交互

您可能使用它的情况示例:

  • 由于使用了Ajax和pushState加载内容并更新URL,因此停止链接后的浏览器
  • 正在停止浏览器提交表单,因为您已经测试了输入的数据并发现了问题

事件。preventDefault()
禁用事件的默认行为。如果存在链接,则重定向。它不会影响您自己的代码,在本例中是alert()调用。

哇,这一个在相当多的人群中被拖走了:)