0

同じページを自動送信して更新するフォームがあります。ボタンの値を変更するJavaスクリプト関数がありますが、AJAXは古い値を投稿し続けます。

AJAX

$.ajax({
            type: 'POST',
            url: this.action,
            data: $('form').serialize()
});

JQUERY

function changevalue()
{
 $('#button').attr('value', 'grapes');
}

form...
<input type="submit"  name="button" id="button" value="apple" onclick="changevalue();" />
...

ボタンには新しい変更された単語が表示されますが、コードビハインド(コントローラー)には古い変数が表示されます。

4

2 に答える 2

3

jQueryの.val()メソッドを使用して値を変更します。

function changevalue() {
    $('#button').val('grapes');
}

jQuery 1.6.0以降、.attr()メソッドはプロパティ値へのアクセスと変更を正しく停止し、属性のみを変更します。

于 2012-06-26T18:27:54.197 に答える
1

送信ボタンのデフォルトのアクションをキャンセルするのではなく、そのボタンをクリックすると、ページが更新されます。つまり、デフォルト値が再表示されます。

インラインマークアップではなく、コードを使用してイベントハンドラーを追加します。

<input type="submit"  name="button" id="button" value="apple" />

<script>
    $( function() {  
        $("#button").on("click", changevalue); //assign the click for 1.7+
        //$("#button").click( changevalue); //assign the click for 1.6.x and below
    });

    function changevalue(evt) {
        evt.preventDefault(); //cancel the click action
        $(this).val("grapes");  //set the value with val, do not use attr
    }
</script>

そして、シリアル化に関するドキュメントから

注:「成功したコントロール」のみがストリングにシリアル化されます。フォームがボタンを使用して送信されなかったため、送信ボタンの値はシリアル化されません。フォーム要素の値をシリアル化された文字列に含めるには、要素にname属性が必要です。チェックボックスとラジオボタン(「radio」または「checkbox」タイプの入力)の値は、チェックされている場合にのみ含まれます。ファイル選択要素からのデータはシリアル化されません。

于 2012-06-26T18:33:37.483 に答える