Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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 为什么我的onsubmit函数提前退出而没有返回false?_Javascript_Jquery_Onsubmit - Fatal编程技术网

Javascript 为什么我的onsubmit函数提前退出而没有返回false?

Javascript 为什么我的onsubmit函数提前退出而没有返回false?,javascript,jquery,onsubmit,Javascript,Jquery,Onsubmit,混乱的部分是当我发出警报时,它工作正常,提交失败,但当我发出警报时,它允许提交通过。。。怎么回事 我也试过: function Validate() { alert($("#email").val()); return false; } 并且得到了同样的行为,它永远不会到达返回语句 如果我使用firebug单步执行JS并在警报或If(取决于上面的版本)时中断,它会停在那里,然后我单击“单步执行”,它会提交表单,为什么它不会返回错误行?您可以改为使用event.preventDe

混乱的部分是当我发出警报时,它工作正常,提交失败,但当我发出警报时,它允许提交通过。。。怎么回事

我也试过:

function Validate() {
    alert($("#email").val());
    return false;
}
并且得到了同样的行为,它永远不会到达返回语句


如果我使用firebug单步执行JS并在警报或If(取决于上面的版本)时中断,它会停在那里,然后我单击“单步执行”,它会提交表单,为什么它不会返回错误行?

您可以改为使用
event.preventDefault()

function Validate() {
    if(document.getElementByID("email").value == "test"){
        alert("It says test.");
    }
    return false;
}
您应该尝试将javascript、css和html分开。不要集成它们,否则会使项目更难管理。与在HTML中使用
onsubmit
属性不同,只需将您的逻辑附加到javascript中表单的
$.submit()
方法,就像我上面所做的那样


本例假设您给表单起了一个名称“myForm”。我只是在本例中使用了这个名称,因为您应该指示您正在处理哪个表单的提交事件,而不是使用通用的
$(“表单”)
选择器。

如果您已经在使用jQuery,那么您一开始就做错了。您不应该从
元素中手动指定
onSubmit
处理程序。按照@Jon的建议执行,只需绑定提交事件:

$("form[name='myForm']").submit(function(e){
  e.preventDefault();
  alert($("#email").val());
});

为什么不把它包在试块里呢

$("form").submit(function() {
    alert($("#email").val());
    return false;
});

问题不在于函数返回true。问题是警报中的JavaScript失败,JavaScript停止解释代码。此时,浏览器将继续执行默认操作,即提交表单


这就是为什么Jonathan Sampson建议在alert()之前使用e.preventDefault(),这样当alert()失败时,浏览器不会继续其默认行为。

Ah-ha!所以这一定意味着如果发生错误,它会返回true?这很奇怪。它应该可以帮助您识别问题,但您仍然需要找出问题所在。问题不在于没有ID为
电子邮件的元素存在吗?没有Pekka。盛宴:我可以看到错误,但这意味着javascript在出现错误时如何反应,为什么它会失败并返回true给onsubmit,或者是因为它失败了,只是放弃了onsubmit?@Ryan-onsubmit将返回true,除非你明确告诉它。如果未指定返回值或除false以外的任何返回值,它将照常提交。这不起作用,表单仍将提交。事实上,如果我在函数中设置断点,它甚至不会中断。。。我甚至试着像Jon所说的那样指定表单名称,但都没有用。@Ryan-您应该使用Firefox并启用Firebug,以查看页面加载时是否存在任何预先存在的javascript错误。我会想象你有一些事情正在进行,因为代码非常简单。
$("form").submit(function() {
    alert($("#email").val());
    return false;
});
function Validate() {
    try {
        alert($("#email").val());
    } catch (e) {
        alert("Problem: " + e);
    }

    return false;
}