1

HTML:

<form method="post" action="action=save&amp;id=239" id="save-form">
    <input type="text" value="0" name="views" /> <input type="submit" value="save plz" name="save" />
</form>
<form method="post" action="action=save&amp;id=862" id="save-form">
    <input type="text" value="3" name="views" /> <input type="submit" value="save plz" name="save" />
</form>
<form method="post" action="action=save&amp;id=12" id="save-form">
    <input type="text" value="2" name="views" /> <input type="submit" value="save plz" name="save" />
</form>

PHP:

if ($_GET["action"] == "save") {
    if (isset($_GET["id"]) && preg_match("/^\d+$/", $_GET["id"])) {
        $id = $_GET["id"];
        // update view count here
    }
}

jQuery:

$('#save-form').ajaxForm({
    beforeSubmit: function() {      
        //
    },
    success: function(data) {
        //
    }
});

私はこのプラグインを使用しています:http://jquery.malsup.com/form/#html

現在、すべてのフォームが同じIDを共有していることに気付きsave-formました。このコードは、の最初のインスタンスに最適ですsave-form。しかし、私はそれが彼ら全員のために働くことを望みます。それは私の主な質問に私をもたらします:

現在のjQuery/HTMLを変更して、個々のフォームを処理するにはどうすればよいですか。

理想的には、たとえばsave-form-239となどの一意のIDが必要save-form-862です。しかし、私はすべてのフォームについて書く必要はありません$('#save-form-239')..$('#save-form-262');私は何ができますか?

4

2 に答える 2

5

dbasemanのソリューションが正常に機能すると確信している場合でも、HTML仕様では無効であるため、通常は同じIDを持つ複数の要素を使用しないようにするのが最善です。

よりクリーンな解決策は、class="save-form"の代わりに使用することid="save-form"です。$('.save-form').ajaxForm(...);

于 2012-06-11T08:50:21.767 に答える
1

次のようにセレクターを記述して、個別のフォームを取得できます。

$('[id=save-form]').eq(0);

(「#」ショートカットではなく明示的な属性セレクターを使用すると、JQueryはIDが一致するすべての要素をプルできます)

各フォームを処理するには、次のようなものが必要になると思います。

$('[id=save-form]').each(function() {
    $(this).ajaxForm({
        beforeSubmit: function() {      
            //
        },
        success: function(data) {
            //
        }
    });
});
于 2012-06-11T08:20:48.907 に答える