【问题标题】:Behavior of html form onsubmit event in JSFiddleJSFiddle 中 html 表单 onsubmit 事件的行为
【发布时间】:2014-05-29 19:40:21
【问题描述】:

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

我可以将return false; 语句与表单的onsubmit 事件相关联,方法是使用内联JavaScript 或将其保存在不同的位置。

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

现在,上述代码运行良好。见 => 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 标记中的表单之后。 这也有效。见 => http://jsfiddle.net/AfdQ5/

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

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

在这里查看 => http://jsfiddle.net/5cR5R/2/

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

【问题讨论】:

    标签: javascript html onsubmit forms http-post


    【解决方案1】:

    您在 JSFiddle 中遇到了设计特性(或缺陷):

    在 JSFiddle 中,“JavaScript”窗格不是引用的 JavaScript 文件的直接源代码,而是 JSFiddle 将该代码包装如下并将其插入&lt;head&gt;。去查看源代码看看它做了什么:

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

    您的&lt;form&gt; 元素找不到falsifier,因为falsifier 只存在于这个匿名函数的范围内。

    【讨论】:

    • 我明白了。顺便说一句,这就是 ASP.NET MVC 的 BeginForm 的 onsubmit 的行为方式(这是我的实际问题)。我没有检查视图源;相反,我只是想知道我的代码出了什么问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2015-11-27
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多