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

Prototype serialize only visible form field value

本文关键字:表单 字段 序列化 原型      更新时间:2023-09-26

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

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

第一个元素是下拉列表,而第二个元素是文本框。文本框被隐藏,并显示下拉列表。两者都有相同的名字。我不想获取隐藏的文本框值。我该怎么做?感谢

警告:解决方案不完整;可以将其作为更好解决方案的起点:

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

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

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函数,它会提升所有的父母,并在隐藏的情况下分别检查每个父母。