2013-03-20 45 views
0

我有一个我正在创建的多字段搜索表单。有9个不同的搜索字段。不过,它们都不是强制性的。唯一的要求是你必须至少填写一个字段。仅处理Codeigniter格式的已编辑字段

它们都在加载时显示默认值(即“状态”),而不是使用标签来指示搜索字段的目的是什么。所以,如果你编辑一个字段,但只留下其他八个字段,那么所有九个字段仍然会有一个值。

有没有什么好的,有效的方法来处理这个问题?我宁愿在发布前(例如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(); 

    }); 

回答

1

其中一个方案是有两种形式,“正常”的形式,你有目前,和“鬼”的形式(它没有提交按钮或可见域)与同一个目标和行动作为一个展示给用户。

当你创建/渲染的形式提供给用户,给每个输入,您可以使用带有遍历他们一个班,并把预先填充值转换成数据属性:

<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();

+0

伟大的答案。我已经做了一些有点类似的事情。我们将视觉表示放在用户正在构建的查询的旁边,以便将input(输入)的blur()推送到div中。我可以同时包括鬼形式的建筑物。谢谢! – 2013-03-20 20:28:23