我有一个搜索表单,其中包含不同的元素,复选框,选择,文本字段等。每个更改都伴随着一个ajax调用,它将结果的数量作为一种计数器。我想只重置导致计数器返回0值的前一个元素。
我正在考虑跟踪变量中的每个变化,每次计数器的计算结果为0时,我都会重置导致变化的元素。然而,我担心这可能会迫使我以不同的代码处理所有不同的元素并跳转。
对于任何人都能想到的问题,是否有更优雅的解决方案?我很感激你的帮助。
答案 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);
我不得不为隐藏字段触发更改事件,以使其更改也冒泡。