3

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

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

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

4

1 回答 1

3

警告:不完整的解决方案;随意将其用作更好解决方案的起点:

不幸的是,在一般情况下,我还没有找到这样做的好方法,但是如果输入元素直接隐藏,则以下解决方案对我有用;但是,如果某些输入包含在另一个隐藏的元素中,则它不起作用。

无论如何,我的解决方案看起来像:

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功能,它会提升所有父母并单独检查每个父母是否隐藏。

于 2013-02-16T15:17:50.137 回答