JavaScript返回false不停止表单提交

JavaScript返回false不停止表单提交,javascript,validation,Javascript,Validation,我们有一些这样的代码已经运行了一段时间。它用于提交html表单的按钮,除非附近的文本框为空。我直接从我们的代码中获取了这个片段;我已经更改了字段的内容,但没有删除任何内容 <input type="image" name="inputName" id="inputId" src="someImage" alt="altText" onclick=" javascript:var obj = document.a

我们有一些这样的代码已经运行了一段时间。它用于提交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)为空,它会发出警报,但在用户单击警报上的OK按钮后仍会提交表单

当我在整个页面上查看源代码,并在本地复制时,它似乎工作得很好;它要么提交表单,要么发出警告,然后拒绝提交

我目前最好的(但仍然很糟糕)理论是,其中一个包含的JavaScript库正在做一些有趣的事情,这可以解释为什么它在真实站点上失败了,但在本地复制时失败了(因为我没有获取它导入的各种库)。这是合乎逻辑的,我也将通过获取库来检查它,但是我很难想象这些库会做些什么来把事情搞砸(或者为什么)…它们只是普通的实用库,比如jquery、实用函数等等


那么,有人对这里可能发生的事情有理论吗?

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;};" 

您提到了jQuery,如果表单正在通过它的。检查
jQuery.submit()
是否绑定到表单

通常在执行纯javascript时,仅返回false是不够的。取决于你想完成什么,你可能想看看或

使用Internet Explorer时,请注意事件对象未传递给函数,而是可以在
窗口中找到。事件

更新 Internet explorer可能希望您改用它。在您的情况下,这将是
window.event.returnValue=false瞄准IE时


祝您好运

如果您有多个库,请尝试逐个添加它们,以确定哪一个会干扰您的表单。
文档。全部
?!你为什么要迎合IE 4?@Scott:这是我的想法,也是我现在正在做的事情……但我很难想象为什么会有一个库以某种方式截获此信息,允许警报通过,但取消返回错误。但也许还有别的事情发生了…(显然我遗漏了什么…@David:这是遗留代码…似乎很久没有人碰过它了。我今天刚通过了一个程序,因为它停止工作了。非常神秘。虽然document.all有点过时,但我认为这不是问题所在。听起来这是一个很好的理由将其拆分并重写
onclick=“return this.form.elements.aTextInputFormFieldId.length”
很抱歉……它是……我刚刚将它重新格式化,以便在网站上可以模糊地阅读。我会在问题中说明这一点。这不是javascript协议。onclick中的字符串被解析为函数,javascript:被简单地视为一个标签。如果它是链接的href属性,那么您将被更正。ftr,我在chrome中也遇到了同样的问题。这看起来既奇怪又肮脏,因为我总是返回true/false,但设置event.returnValue使其按预期工作。呜呜。