0

PHPでボタンのテーブルを生成しています

echo ' <td">
<form action="test.php" method="POST">
<input type="hidden" id="node" name="node" value="'.$fnode->{'name'}.'">
<input type="hidden" id="service" name="service" value="'.$flavor.'">
<input type="hidden" id="running" name="running" value="false">
<input type="submit" value="OFF" class="button">
</form>
</td>';

jquery ajax経由でリロードせずに値を送信したいのですが、このコードを使用しています:

$(".button").click(function() { $('.error').hide();

    var dataString = 'node='+ document.getElementById('node').value + '&service=' + document.getElementById('service').value + '&running=' + document.getElementById('running').value;

    $.ajax({
        type: "POST",
        url: "test.php",
        data: dataString,
        success: function() {
            alert ("Success");
        }
    });
    return false;
});

コードはこれまでのところ機能しています。常に最初のフォームからデータを送信するだけです。すべてのボタンを区別する最良の方法は何ですか。フォームでカウンターを使用することもできますが、js の「ifs」を正確に記述するにはどうすればよいでしょうか。これを行うためのよりエレガントな方法はありますか。フォームの数は動的です。

4

3 に答える 3

1

クリックされたボタンの親フォームを簡単に取得できますが、他のもののためにフォームに一意の ID を設定したい場合もあります。また、入力の ID を削除するか、一意にする必要があります。

echo ' <td">
<form action="test.php" method="POST" id="form_node_' . $fnode->{'name'} . '>
<input type="hidden" name="node" value="'.$fnode->{'name'}.'">
<input type="hidden" name="service" value="'.$flavor.'">
<input type="hidden" name="running" value="false">
<input type="submit" value="OFF" class="button">
</form>
</td>';


$(".button").click(function(e) {
    e.preventDefault(); 
    $('.error').hide();
    var $form = $(this).closest('form'), // the closest parent form
        dataString = $form.closest('form').serialize(); // serialize the values instead of manually encoding
    $.ajax({
        type: "POST",
        url: "test.php",
        data: dataString,
        success: function() {
            alert ("Success submitting form ID " + $form.attr('id'));
            // you can now modify the form you submitted
        }
    });
    return false;
});
于 2012-11-21T13:43:04.827 に答える
0

各送信ボタンに id を与えることができます:

<input id="button-1" type="submit" value="OFF" class="button">

次に、特定のボタンのクリックでイベントをトリガーします。

$("#button-1").click(function() { ... });
于 2012-11-21T13:43:16.713 に答える
0

最善の方法は、フォーム要素に一意の ID を使用することです。もう 1 つの方法は、クラスを同じ名前の複数の要素に設定することです。

ただし、次のアプローチの方がはるかに望ましいです。

$("form").on("submit", function() {
    $.ajax({
        type: "POST",
        url: "test.php",
        data: $(this).serialize(),
        success: function() {
            alert ("Success");
        }
    });
    return false;
});

id(ただし、フォーム要素から重複する属性を削除することを忘れないでください。)

于 2012-11-21T13:41:33.800 に答える