如何重置搜索表单中的特定表单元素?

时间:2012-09-04 14:31:46

标签: javascript jquery

我有一个搜索表单,其中包含不同的元素,复选框,选择,文本字段等。每个更改都伴随着一个ajax调用,它将结果的数量作为一种计数器。我想只重置导致计数器返回0值的前一个元素。

我正在考虑跟踪变量中的每个变化,每次计数器的计算结果为0时,我都会重置导致变化的元素。然而,我担心这可能会迫使我以不同的代码处理所有不同的元素并跳转。

对于任何人都能想到的问题,是否有更优雅的解决方案?我很感激你的帮助。

3 个答案:

答案 0 :(得分:1)

我无法评论您的问题,但是:如果我理解正确,那么有一个很大的形式,并且对任何元素的每次更改都会触发一个返回结果集的ajax调用。

如果此结果集大小为零,则表示您希望表单重置为以前的值。

这意味着,只有最后更改的值必须被追踪并重置?

在这种情况下,您的onchange事件回调应使用this值来获取当前表单元素值和ID。然后,当结果集返回时,如果没有行,则将存储的值设置为该元素。

否则,如果表单是全局管理的,那么您可以始终使用.clone()调用存储它,然后.remove()将其存储,如果结果集为空则将.insert()克隆回来。

PS:我知道这个解决方案不是优雅:)

答案 1 :(得分:0)

您的AJAX模块可以返回一个JSON编码的字符串,其中包含导致此事件发生的数据(PHP函数:JSON_encode),从那里开始,您可以循环重置它们的错误值并显示更多信息。即“您的电子邮件似乎无效”。

PHP:请参阅JSON_encode JavaScript:请参阅getElementsByTagName('input')(或textarea或select) 注意:如果是选择项,您可能更愿意更改属性“selectedIndex”而不是“value”。

答案 2 :(得分:0)

我通过使用

将每个更改记录到表单来解决问题
$("#form_id").on("change", function(event) {
  //Event bubbling
  type = $(event.target).get(0).type;
  selector = $(event.target);
}

然后使用策略设计模式(Javascript Strategy Design Pattern),我相应地重置每个可能的字段类型。文本字段示例

var Fields = {
  "text": {
    resetAction: function(fieldSelector) {
      fieldSelector.val('');
    }
  }
};

//To call the reset action for the type of field,
Fields[type].resetAction(selector);

我不得不为隐藏字段触发更改事件,以使其更改也冒泡。