仅以Codeigniter形式处理已编辑的字段


Process only edited fields in Codeigniter form

我有一个我正在创建的多字段搜索表单。有9个不同的搜索字段。不过,这些都不是强制性的。唯一的要求是您必须填写至少一个字段。

它们都显示一个默认值(即:'State'),而不是使用标签来指示搜索字段的目的。因此,如果您编辑了一个字段,但保留其他8个字段,那么这9个字段仍然有一个值。

有没有好的、有效的方法来处理这个问题?我不希望在发布(例如if($(inputid).val() == 'Default Value') { ...)或控制器(例如if($this->input->post('name') == 'default value') { $data['name'] = '')之前手动使用jQuery进行逻辑操作,因为在整个网站中会有一些搜索迭代,所以动态解决方案将非常有用,并节省大量时间。

谢谢!


编辑以下是我在@veddermatic的帖子后得出的要点:

呈现形式:

<form id="search-form" action="spend/search">
<input id='fname' value='First Name' data-original_value='First Name' name='fname'/>
<input id='lname' value='Last Name' data-original_value='Last Name' name='lname'/>
...
</form>

鬼形式:

<form id="ghost-form" action="spend/search">
<!--nothing here yet-->
</form>

jquery:

$('.do-the-search').click(function(e) {
        e.preventDefault();
        $('#search-form input').each(function() {
            var $this = $(this);
            if($this.attr('data-original_value') != $this.val())
            {
                var clone = $this.clone();
                $("#ghost-form").append(clone);
            }
        });
        $("#ghost-form").submit();
    });

一个选项将有两个表单,您目前拥有的"正常"表单和一个"幽灵"表单(它没有提交按钮或可见字段),具有与呈现给用户的相同的目标和操作。

当您为用户构建/呈现表单时,为每个输入提供一个类,您可以使用它来迭代它们,并将预填充的值放入数据属性中:

<input type="text" class="myFormInput" name="in1" data-original_value="blah" value="blah" />
<input type="text" class="myFormInput" name="in2" data-original_value="something" value="something" />
....

然后用javascript处理面向用户的表单提交,迭代.myFormInput元素,如果它们的值与原始值不同,则在"幽灵"表单中创建具有相同名称的输入元素,然后提交该表单。这只会发送改变的元素,如果由于某种原因,他们有javascript关闭/禁用,你优雅地降级,因为你的原始表单仍然会提交。

编辑:你可以很容易地把它变成一个插件,并使用它在所有的形式,如果你有多个实例,所以你只需要这样做:jQuery('#userFacingForm').ghostForm();