原型仅序列化可见的表单字段值

时间:2013-02-16 13:32:15

标签: javascript prototypejs visible

是否可以在prototype.js中仅序列化可见的表单字段值。我有一个表单,其中元素具有相同的名称,但一个是可见的,但另一个是隐藏的。当我使用$('formid').serialize()序列化表单时,两个字段值都将来临,输出如下:

user_email=abc@example.com&mymodule_custom_delivery_area=20&mymodule_custom_delivery_area=test

当第二个是文本框时,第一个元素是下拉列表。隐藏了文本框并显示了下拉列表。两者都有相同的名称。我不想采取隐藏的文本框值。我怎样才能做到这一点?感谢

1 个答案:

答案 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函数,它会提升所有父母,如果它被隐藏,则分别检查每个父母。