0

次の HTML フォームを使用すると、ユーザーはオプションで製品のカスタム ラベルを保存できます。

<form action="http://domain.com/members/systems" method="post" class="mod-SystemLabel-EditForm">
    <label class="mod-SystemLabel-EditLabel" for="label-623">Customer label</label>
    <input type="text" value="sdff sdf sd" name="fields[customer-label]" class="mod-SystemLabel-EditInput" id="label-623">

    <a href="#" class="mod-SystemLabel-OtherButton-clear">Clear</a>
    <a href="#" class="mod-SystemLabel-OtherButton-cancel">Cancel</a>

    <input type="submit" value="Save" name="action[system-edit-label]">

    <input type="hidden" value="623" name="id">
</form>

テキスト入力を手動でクリアしてフォームを送信すると、Symphony CMS は期待どおりに空の値を記録します。

以下のように jQuery を使用してフォーム送信をトリガーすると、Symphony CMS は現在の値をそのまま残します (または再保存しますか?)。

$('.mod-SystemLabel-OtherButton-clear').click(function(e) {
    e.preventDefault();
    $(this).siblings('.mod-SystemLabel-EditInput').val('');
    //alert($(this).closest('form').serialize());
    $(this).closest('form').submit();
});

コメント行のコメントを外すと、アラートには次のものが含まれます。

fields%5Bcustomer-label%5D=&id=623

このシリアライゼーションは、自分で入力をバックスペースしたときに生成されるものと同じであるため、実際のフォーム送信は、手動で入力をクリアして送信ボタンをクリックした場合と同じであるように見えます。

Symphony フィールドは必須に設定されておらず、検証規則もありません。

最終結果が異なるのはなぜですか? また、空の値を保存して以前の製品ラベルを上書きするにはどうすればよいですか?

4

1 に答える 1

0

フォームが JavaScript を介して送信される場合、フォームの送信入力の名前は渡されず、Symphony CMS はこれを使用して適切なイベントをトリガーします。

送信入力とともに渡されるイベント名を取得するには、「クリック」をトリガーします。

$('.mod-SystemLabel-OtherButton-clear').click(function(e) {
    e.preventDefault();
    $(this).siblings('.mod-SystemLabel-EditInput').val('');
    $(this).siblings('input[type=submit]').trigger('click');
});
于 2014-02-11T22:14:30.410 に答える