Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 如何防止执行onclick语句?_Javascript - Fatal编程技术网

Javascript 如何防止执行onclick语句?

Javascript 如何防止执行onclick语句?,javascript,Javascript,我想使用一个事件侦听器来阻止submit按钮的onclick语句,但是,使用event.preventDefault()无法正常工作 代码如下所示: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <htm

我想使用一个事件侦听器来阻止submit按钮的
onclick
语句,但是,使用
event.preventDefault()
无法正常工作

代码如下所示:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="application/x-javascript">
        function addListener() {
            document.getElementById("submit").addEventListener("click",
                function(ev) {
                    alert("listener");
                    ev.preventDefault();
                },
                false);
        }
    </script>

    <title></title>

</head>

<body onload="addListener();">
<form id="form" method="post" target="">
<input type="submit" id="submit" onclick="alert('onclick')" value="test" />
</form>

</body>

</html>

函数addListener(){
document.getElementById(“提交”).addEventListener(“单击”,
功能(ev){
警惕(“听众”);
ev.preventDefault();
},
假);
}
预期的行为只有“listener”会被提醒,但实际上(Firefox 3.7a5pre),“onclick”和“listener”都会按照给定的顺序被提醒

似乎在侦听器之前执行了
onclick
,因此
event.preventDefault()
不起作用。有没有办法阻止执行
onclick

onclick属性等)和DOM2处理程序(通过
attachEvent
/
addEventListener
动态添加)彼此独立

您唯一能做的就是删除DOM0处理程序(通过为属性分配一个空字符串),然后只使用DOM2处理程序

您可以在删除DOM0处理程序之前从属性中检索它,并将其重新注册为DOM2处理程序。您会遇到一些浏览器不一致的情况(一些会给您一个
函数
对象,另一些会给您一个字符串),但这些问题在代码中很容易处理。

您可以尝试以下方法:

 function addListener() {
        document.getElementById("submit").addEventListener("click",
            function(ev) {
                alert("listener");
                ev=ev¦¦event; 
                ev.preventDefault? ev.preventDefault() : ev.returnValue = false; 
            },
            false);
    }

谢谢你的回答,这很有帮助。+1-正在写类似的东西。尝试将
preventDefault()
视为阻止元素的默认操作—如果未设置任何事件,将发生的操作。通过
onclick
属性设置事件不会设置默认操作,因此
preventDefault()
不会阻止调用该处理程序。这在Firefox上也会产生相同的效果…。您的代码只解决了旧浏览器的兼容性问题。当您使用addEventListener('click',handler(){})时,您的click事件将被触发;这是事件捕获和触发部分-(MS还定义了事件冒泡阶段)-如果您在注册处理程序后找到强制事件“取消执行”的方法,我有兴趣了解它