JSFiddle中的html表单onsubmit事件的行为

时间:2014-05-29 19:40:22

标签: javascript html onsubmit html-form-post

我有一个简单的表单,除了提交按钮之外别无其他。我想做的就是阻止提交表格(我知道这没有任何意义,但这只是为了说明)。所以我正在使用表单的onsubmit事件和此事件returns false。这确实有效,但这就是“不可理解的行为”出现的地方。

我可以使用内联return false;onsubmit语句与表单的JavaScript事件相关联,也可以将其保存在其他位置。

<form onsubmit="return false;" id="form1" method="post">
    <input type="submit" id="btnButton" value="Submit" />
</form>

现在,上述代码工作得很好。见=&gt; http://jsfiddle.net/MccK5/

我甚至可以修改上面的代码,以使JavaScript分离(不引人注目)。

--some html markup initially
<form onsubmit="return falsifier()" id="form1" method="post">
    <input type="submit" id="btnButton" value="Submit" />
</form>

<script>
    function falsifier() {
    return false;
}
</script>


--other html markup follows

此处,脚本标记位于HTML标记中的表单后面。 这也有效。见=&gt; http://jsfiddle.net/AfdQ5/

但是当我将JavaScript转移到另一个地方(例如:外部文件)时,这似乎不起作用。

通过查看inspect元素中的控制台,我注意到错误falsifier is not defined

在此处查看=&gt; http://jsfiddle.net/5cR5R/2/

有人可以详细说明为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

您在JSFiddle中遇到了设计功能(或缺陷):

在JSFiddle中,&#34; JavaScript&#34;窗格引用的JavaScript文件的直接源代码,而JSFiddle将该代码包装如下,并将其插入<head>。只需查看源代码即可查看其功能:

<script type='text/javascript'>
    //<![CDATA[ 
    window.onload=function(){
        function falsifier() {
            return false;
        }
    }
    //]]>  
</script>

您的<form>元素无法找到falsifier,因为falsifier仅存在于此匿名函数的范围内。