Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重置搜索表单中的特定表单元素?_Javascript_Jquery - Fatal编程技术网

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

Javascript 如何重置搜索表单中的特定表单元素?,javascript,jquery,Javascript,Jquery,我有一个搜索表单,其中包含不同的元素、复选框、选择、文本字段等。每次更改都伴随着一个ajax调用,该调用以计数器的形式获取结果的数量。我只想重置导致计数器返回值0的前一个元素 我在考虑跟踪变量中的每个更改,每次计数器计算为0时,我都会重置导致更改的元素。然而,我担心这会迫使我用大量的代码和跳跃来处理所有不同的元素 对于这个问题,有没有任何人都能想到的更优雅的解决方案?非常感谢您的帮助。您的AJAX模块可以返回一个JSON编码的字符串,其中包含导致此事件发生的数据(PHP函数:JSON_encod

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

我在考虑跟踪变量中的每个更改,每次计数器计算为0时,我都会重置导致更改的元素。然而,我担心这会迫使我用大量的代码和跳跃来处理所有不同的元素


对于这个问题,有没有任何人都能想到的更优雅的解决方案?非常感谢您的帮助。

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

PHP:参见JSON_编码 JavaScript:请参阅getElementsByTagName('input')(或textarea或select)
注意:对于select项,您可能更希望更改属性“selectedIndex”而不是“value”。

我无法对您的问题进行评论,但是:如果我理解正确,有一个大表单,对任何元素的每次更改都会触发一个ajax调用,返回一个结果集

如果此结果集大小为零,则希望窗体重置为以前的值

这意味着,只需跟踪最后更改的值,然后重置

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

否则,如果表单是全局管理的,则始终可以通过调用
.clone()
来存储它,然后调用
.remove()
.insert()
在结果集为空时返回克隆


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

我通过用

$("#form_id").on("change", function(event) {
  //Event bubbling
  type = $(event.target).get(0).type;
  selector = $(event.target);
}
然后使用策略设计模式,我相应地重置每个可能的字段类型。文本字段的示例

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

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

我必须为隐藏字段触发一个更改事件,使其更改也冒泡。

您能提供表单和js的代码示例吗?这实际上为我指明了正确的方向。检查我的答案。