提交和onclick不能一起工作

时间:2012-12-12 12:08:10

标签: javascript html

<input type="submit" class="sub" onClick="exefunction2()" id="button">

当我点击提交按钮时,onClick无效。我怎样才能解决这个问题?我需要在提交表单时这样做,因为onClick事件包含值。

7 个答案:

答案 0 :(得分:11)

最好的方法是在表单标记上调用方法,如下所示:

<form onsubmit="return exefunction2();">
...
</form>

返回false将不会提交表单,true将提交!

发布更多数据(使用exefunction2构建),您可以使用此

<script type="text/javascript">
    function exefunction2(form) {
        //add dynamic values
        var dynValues = {
            "val1": 1,
            "val2": "bla"
        };

        for(var name in dynValues) {
            //check if field exists
            var input = null;
            if(document.getElementsByName(name).length === 0) {
                input = document.createElement('input');
                input.setAttribute('name', name);
                input.setAttribute('type', 'hidden');
                form.appendChild(input);
            }
            else {
                input = document.getElementsByName(name)[0];
            }

            input.setAttribute('value', dynValues[name]);
        }
        return true;
    }
</script>

<form onsubmit="return exefunction2(this);">
    <input type="submit" />
</form>

答案 1 :(得分:1)

您可以使用Javascript提交表单。

<form id="form_id" ...>
<input type="button" class="sub" onclick="exefunction2();" id="button">

Javascript:

function exefunction2() {
    ...
    document.forms["form_id"].submit();
}

答案 2 :(得分:1)

W3学校在这里有一个很好的解释:http://www.w3schools.com/js/js_validation.asp

基本上,提交在执行任何操作之前等待来自onClick的返回值。如果您愿意,也可以连接confirm()请求。如果表单有效,请写一些类似return confirm("continue")的内容。这是一个古老的问题,但我希望它可以帮助任何偶然发现它的人。失败的另一个重要原因是脚本中存在错误。不幸的是,除非您在浏览器中运行调试器,否则很难知道是什么导致脚本崩溃。打开浏览器调试器可以帮助跟踪任何问题。在Chrome中,您可以使用CTRL-SHIFT-I for Windows或CMD-OPTION-I for Mac。如果暂停捕获的错误,您可以找到任何过早停止脚本的语法或致命错误。

答案 3 :(得分:0)

好吧,我不知道这是否是“正式的”预期行为,但它是如何工作的:如果你添加一个onclick Javascript函数,提交类型按钮将不再提交。只要有功能也提交表单或有函数返回false

答案 4 :(得分:0)

尝试<form onSubmit="exefunction2()">

答案 5 :(得分:0)

同意@silly,我使​​用了相同的想法。我正在分享实施。我的目标是禁用用于提交表单的“执行”按钮,直到收到响应为止,然后应再次启用“执行”按钮。我正在使用Flask。

我的表单:

<form onsubmit="return disableExecuteButton();" method="POST" action="/dothis">
.....
</form>

我的JS:

function disableExecuteButton(){
    var executeButton = document.getElementById("executeButton");
    executeButton.setAttribute("disabled","disabled");
    return true;
}

function reactivateExecuteButton(){
    var executeButton = document.getElementById("executeButton");
    executeButton.setAttribute("disabled","enabled");
}

从烧瓶中,我返回:

return render_template('result.html', message=message, error=error, html_content=result, history=session['actions_taken'], done=True)

“ done = True”是我用来表示已收到响应,我们需要再次启用该按钮。

要重新启用该按钮:

{% if done %}
    <script type="text/javascript">
        reactivateExecuteButton()
    </script>
{% endif %}

答案 6 :(得分:-1)

将事件更改为onsubmit,并返回false以避免提交表单。

<input type="submit" class="sub" onsubmit="exefunction2();return false;" id="button">