JQuery map()表单输入

时间:2011-02-18 03:21:24

标签: forms map

我正在使用以下示例映射名称属性:input。我必须在map()中放置一个条件语句,以确定是否选中了复选框并返回true或false。但现在我没有得到选择选项名称attr。我觉得它需要更多的代码编写。获取所有名称属性并查看已签入复选框的有效方法是什么。查看http://jsfiddle.net/gVHaQ/3/

上的示例
<form>
    <input type="text" name="name" value="John"/>
    <input type="text" name="password" value="password"/>
    <input type="text" name="url" value="http://domain.org/"/>
    <select>
        <option name="one">1</option>
        <option name="two">2</option>
        <option name="three">3</option>
    </select>
    <input type="checkbox"/>            
</form>
<p></p>

$("p").append($(":input").map(function() {
    if ($(this).attr('type') == 'checkbox') {
        return $(this).attr('checked');
    }
    else {
        return $(this).attr('name');
    }
}).get().join(", "));

这是归还的内容 name,password,url,true

2 个答案:

答案 0 :(得分:1)

也许这就是你想要的?

$("p").append($(":input").map(function() {
    if($(this).is('select')) {
        return $(this).children('option').map(function() {
          return $(this).attr('name');
        }).get().join(", ");
    } else if($(this).attr('type')=='checkbox') {
        return $(this).attr('checked');
    } else {
        return $(this).attr('name');
    }
}).get().join(", "));

http://jsfiddle.net/gVHaQ/4/

如果没有,您应该提供预期的输出

编辑:接受版本

$("p").append($(":input").map(function() {
    if($(this).is('select')) {
        return $(this).val();
    } else if($(this).attr('type')=='checkbox') {
        return $(this).attr('checked');
    } else {
        return $(this).attr('name');
    }
}).get().join(", "));

答案 1 :(得分:1)

如果您仍想使用map():http://jsfiddle.net/PmDr9/,则可以避免使用地图两次。

但是如果你想跳过map(),我想你可以尝试的一种方法是$('form')。serialize()。获得序列化字符串后,可以使用regex表达式替换不需要的数据。但请注意,您需要为和提供名称。这是一个例子:http://jsfiddle.net/JKuZE/1/。 (注意:我的正则表达式不是那么好,所以也许你可以玩它并得到你想要的结果。)

我不知道第二个实现是否符合您的要求,但这是一个建议。