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 回答