单击后禁用提交按钮

时间:2012-02-21 13:41:46

标签: jquery button submit page-lifecycle

这是我的代码:

<form name='frm' id='frm' action='load.asp' method='post' onSubmit='return OnSubmit(this)' style='margin-top:15px'>
    <input type='submit' name='send' id='send' onclick="this.disabled=true;return true;" value='Send' title='test'>
</form>

我希望我的onsubmit函数能够被执行,我希望页面被提交。 在我的网站上,没有提交,也没有功能

我试图在这里复制它,但表单似乎已发布,我的功能永远不会被执行... http://jsfiddle.net/V7B3T/1/

我不知道何时应该重新激活该按钮。

我应该在document.ready或onSubmit函数中执行吗?

所以,如果有人可以修复小提琴:),之后我会将它与我的代码进行比较。 我想:S我迷路了

全部谢谢

4 个答案:

答案 0 :(得分:15)

如果您想在提交之前验证表单或进行任何更改,并且只有在表单有效时才提交,您可以执行以下操作:

<form id="frm" action="load.asp" method="post" enctype="multipart/form-data">
    <input type="submit" name="send" id="send" value="Send" title="test">
</form>

和JavaScript代码:

$('#frm').bind('submit', function (e) {
    var button = $('#send');

    // Disable the submit button while evaluating if the form should be submitted
    button.prop('disabled', true);

    var valid = true;    

    // Do stuff (validations, etc) here and set
    // "valid" to false if the validation fails

    if (!valid) { 
        // Prevent form from submitting if validation failed
        e.preventDefault();

        // Reactivate the button if the form was not submitted
        button.prop('disabled', false);
    }
});

这是一个有效的fiddle

答案 1 :(得分:5)

我肯定会将该代码移动到它所属的外部JS(和CSS)文件中,但这应该可行:

onclick="this.disabled=true;this.parentNode.submit();"

由于您正在禁用提交按钮,因此一旦实际的表单提交单击发生,它将被禁用(在此之前发生onclick)。使用JS提交表单应该可以解决问题。

http://jsfiddle.net/V7B3T/4/

编辑:关于重新启用按钮,我必须在OnSubmit()函数运行后发生。

答案 2 :(得分:5)

如果您的表单确实进行了回发,那么您实际上是在更改页面,因此无需担心重新启用按钮(一旦页面加载就会发生这种情况)。

此外,既然您正在使用jQuery,那么您也可以正确使用它并通过使用jQuery函数附加事件处理程序来分离HTML标记和Javascript,而不是onclickonsubmit, HTML元素上的etc属性。

更新了HTML:

<form name='frm' id='frm' action='http://jsfiddle.net/' enctype='multipart/form-data' method='post' style='margin-top:15px'>
    <input type='submit' name='send' id='send' value='Send' title='test'>
</form>

更新了Javascript:

function submitForm(form) {
    alert("submitted");
}

$('#send').click(function(e) {
    this.disabled = true;
});

$('#frm').submit(function(e) {
    submitForm(this);    
});

Working jsFiddle

你需要将它包装在$(document).ready(function() {...});调用中以便在实际页面上使用 - 我把它留下了,因为jsFiddle无论如何都会执行任何提供的Javascript onLoad。

答案 3 :(得分:0)

如果你不想提交这个页面,这应该可以解决问题:

onclick="this.disabled=true;return false;"