0

我的标记

<form action="blah/foo" method="POST" id="frm1">
<input type="hidden" id="v" />
</form>
......
......
<!--after some code-->
<button id="btn1">test</button>
<input type="text" id="somevalue" />

我的目的是当我单击按钮 btn1 时,获取的值somevalue并将其提供给隐藏值v并提交表单,表单需要提交(仅一次)所以我使用了 jqueryone方法并且工作正常

第二件事是如果somevalue为空我不想提交

问题场景

<script>
$('#btn1').one('click',function(){
    if(!$('#somevalue').val()){
    $('p#msg').html('Empty value');
     return false;
    }
    $('#frm1').submit();

});
</script>

如果用户首先进行空输入并尝试提交错误消息将显示..但之后即使输入有效,点击事件也不会触发(我知道这是因为one功能)

我正在寻找表单将只提交一次的替代方案

4

5 回答 5

3
var form_sent = false;
$('#btn1').click(function(){
    if(form_sent == true){ return; }
    if(!$('#somevalue').val()){
        $('p#msg').html('Empty value');
        return false;
    }
    form_sent = true;
    $('#frm1').submit(); 
});
于 2012-07-06T09:40:55.690 回答
3

不要使用'one'来让你的处理程序只被调用一次,而是将你的处理程序声明为一个命名函数并使用jQuery的绑定/取消绑定来删除点击处理程序,如果(且仅当)该字段在表单是有效值时提交。否则继续监听点击事件。像这样:

function onFormSubmitted (e) {
    if($("#somevalue").val === "") { // If the field's value is invalid...
        $('p#msg').html('Empty value'); // ... then show error message...
        return; // ...and do nothing else - just keep on listening
    }

    // Ok, we have valid input so...
    $('#btn1').unbind("click", onFormSubmitted); // ...stop listening...
    $("#frm1").submit(); // ...and submit the form
}

// Start listening for the click event
$('#btn1').bind("click", onFormSubmitted);

或者,如果您仍想使用 'one',您可以调整前面的示例,如下所示:

function onFormSubmitted (e) {
    if($("#somevalue").val === "") { // If the field's value is invalid...
        $('p#msg').html('Empty value'); // ... then show error message...
        $('#btn1').one("click", onFormSubmitted); // ...re-attach one-time listener...
        return; // ...and wait
    }

    // Ok, we have valid input so don't re-attach one-time listener...
    $("#frm1").submit(); // ...just submit the form
}

// Add one-time listener for the click event
$('#btn1').one("click", onFormSubmitted);
于 2012-07-06T09:50:55.490 回答
1

尝试:

$('#btn1').one('click',function(){
    callFunc();
});

function callFunc(){
 if($('#somevalue').val() == ""){
    $('p#msg').html('Empty value');
    $('#btn1').one('click',function(){ callFunc(); });
    return false;
    }
 $('#frm1').submit();
}
于 2012-07-06T09:40:57.353 回答
1

首先,为什么不在表格中输入您的意见?这样做有特定的理由吗?

同样要在直接的 javascript 中执行此操作,而不是使用 jquery,我将执行以下操作:

<form action="blah/foo" method="POST" id="frm1" onsubmit="return validateForm();">

validateForm 只是检查输入是否为空,如果是则返回 false,否则返回 true。将 false 返回到 onsubmit 将停止表单提交。

于 2012-07-06T09:41:03.810 回答
0

尝试绑定事件,

$('#btn1').bind('click',function(){
    if(!$('#somevalue').val()){
    $('p#msg').html('Empty value');
     return false;
    }
    $('#frm1').submit();

});​
于 2012-07-06T09:40:45.730 回答