是否可以在prototype.js
中仅序列化可见的表单字段值。我有一个表单,其中元素具有相同的名称,但一个是可见的,但另一个是隐藏的。当我使用$('formid').serialize()
序列化表单时,两个字段值都将来临,输出如下:
user_email=abc@example.com&mymodule_custom_delivery_area=20&mymodule_custom_delivery_area=test
当第二个是文本框时,第一个元素是下拉列表。隐藏了文本框并显示了下拉列表。两者都有相同的名称。我不想采取隐藏的文本框值。我怎样才能做到这一点?感谢
答案 0 :(得分:3)
警告:不完整的解决方案;随意使用它作为更好解决方案的起点:
不幸的是我在一般情况下没有找到一个好方法,但是下面的解决方案对我有用, if 直接隐藏输入元素;但是,如果某些输入包含在另一个隐藏的元素中,则它不起作用。
无论如何,我的解决方案如下:
function check() {
var inputs = $("myform").getElements();
var visibleInputs = inputs.grep({ match: function(elem) { return elem.visible();} });
var serialized = Form.serializeElements(visibleInputs);
console.log(serialized); // here do something useful with it instead
}
在第一行,它收集表格的所有字段的列表。在第二行,它过滤掉所有可见元素(grep
需要一个带match
函数的项,所以我提供了一个带有match
键的简单字典,以欺骗它以为我通过在匹配器中)。最后,只有过滤后的元素被序列化。
请:任何人都可以改进这一点以排除不可见的输入字段,因为某些包含元素被隐藏了吗?我只能想到一些复杂的match
函数,它会提升所有父母,如果它被隐藏,则分别检查每个父母。