JavaScript返回false而不是停止表单提交

时间:2011-02-09 20:36:56

标签: javascript validation

我们有一些这样的代码已经工作了一段时间。它是一个提交html表单的按钮,除非附近的文本框为空。我已直接从我们的代码中获取此代码段;我已经更改了字段的内容,但没有删除任何内容。

<input 
    type="image" 
    name="inputName"    
    id="inputId" 
    src="someImage" 
    alt="altText"
    onclick="
        javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] : 
        document.getElementById(&quot;aTextInputFormFieldId&quot;); 
        if(obj.value.length == 0)
        {
            alert('It is 0!');
            return false;
        };" 
    style="someStyle" />

(原始代码全部在一行,但为清楚起见,此处添加了换行符。)

它似乎在Firefox中完美运行。但是在IE中,它以我无法理解的方式失败:如果输入字段(aTextInputFormFieldId)为空,它会发出警报,但在用户单击警报上的okay按钮后仍然提交表单

当我在整个页面上创建一个视图源并在本地复制它时,它似乎完美无缺;它要么提交表格,要么提出警报,然后拒绝提交。

我最好的当前(但仍然很糟糕)理论是,其中一个包含的JavaScript库正在做一些有趣的事情,这可以解释为什么它在真实网站上失败,但是当我在本地复制它时失败(因为我没有&#39;抓住它导入的各种库。)这具有逻辑意义,我也可以通过抓取库来检查它,但我很难想象这些库可以做什么弄乱这个(或者为什么)......它们只是普通的实用程序库,比如jquery,实用程序函数等。

所有人都有关于这里会发生什么的理论吗?

2 个答案:

答案 0 :(得分:3)

你提到过jQuery,如果jQuery通过submit() handler做任何事情,它可能会干扰你的表单。检查jQuery.submit()是否与表单绑定。

通常在执行纯javascript时,返回false是不够的。根据您要完成的内容,您可能需要查看preventDefaultstopPropagation

使用Internet Explorer时,请注意事件对象未传递给该函数,但可以在window.event中找到。

<强>更新 Internet Explorer可能希望您使用event.returnValue = false;。在您的情况下,在定位IE时为window.event.returnValue = false;

祝你好运

答案 1 :(得分:0)

Javascript协议链接必须是一行,即。没有新线。

onclick="javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] :document.getElementById(&quot;aTextInputFormFieldId&quot;); if(obj.value.length == 0){alert('It is 0!');       return false;};"