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、フォームを送信することです。フォームは送信する必要があります(1回のみ)ので、jqueryoneメソッドを使用すると正常に動作します

2 つ目は、somevalueが空の場合、送信したくないことです

問題のシナリオ

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

});
</script>

IFユーザーが最初に空の入力を行い、エラーメッセージを送信しようとすると、表示されます..しかし、その後、有効な入力があってもクリックイベントがトリガーされません(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

ハンドラーが 1 回だけ呼び出されるように「one」を使用する代わりに、ハンドラーを名前付き関数として宣言し、jQuery の bind / unbind を使用して、フォームが有効なときにフィールドに有効な値がある場合にのみクリック ハンドラーを削除します。提出した。それ以外の場合は、クリック イベントをリッスンし続けます。そのような:

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

まず、フォームに入力してみませんか?このようにする特別な理由はありますか?

また、jqueryを使用するのではなく、ストレートjavascriptでこれを行うには、次のようにします。

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

validateFormは、入力が空であるかどうかを確認するだけです。空の場合はfalseを返し、そうでない場合はtrueを返します。onsubmitにfalseを返すと、フォームの送信が停止します。

于 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 に答える