2013-02-21 25 views
3

我面对一个问题如下JavaScript对象的值:获取多个输入字段具有相同的类并加入到

<input title="1" type="text" class="email"> 
<input title="2" type="text" class="email"> 
<input title="3" type="text" class="email"> 

以上是我的html在那里我试图抓住每一个输入框的电子邮件和将其存储在标题作为关键字的对象中。

这里是我的JavaScript目前看起来像

var emailObj = {}; 
$("input[class=email]").each(function() { 

    var id = $(this).attr("title"); 
    var email = $(this).val() 

    emailObj[id] = email; 
}); 

目前的console.log显示添加到该对象只有最后一个值,如下所示。

Object { 3="[email protected]"} 

凡我预期的结果应该像下面显示

Object { 1="[email protected]", 2="[email protected]", 3="[email protected]"} 

有人能提供一些线索在这一问题上对我好吗?

感谢您的阅读, 关心。

+4

无法重现:http://jsfiddle.net/Lj24q/。 – 2013-02-21 15:42:23

+0

不知道它是否适合你的情况,但为什么不使用'.serializeArray();'并把标题作为名称。你只需要注意在服务器端的部分因为它会是一个'{name:“”,value:“”}' – 2013-02-21 15:57:29

+0

@FelixKling数组他可能会写出正确的代码,可能是他认为代码不工作,因为在代码执行时,文本框的值为空 – Exception 2013-02-21 16:23:15

回答

0

您的taskArray实际上是一个object,而不是一个数组。

更换var taskArray = {}这个应该可以解决问题:

var taskArray = new Array(); 

编辑:在第二个想法,你已经什么是完全有效的!

我编辑我的回答重复一下我在评论中说过:你需要使用控制台调试:

.each(),放:console.log(id); - 预期的结果将是“1 “,”2“,”3“ - 如果它只是”3“,这可能意味着您的其他输入不会因任何原因被拾取。如果这是结果,则在分配值console.log(emailObj[id]);后打印出对象。

+0

*有什么问题?*代码看起来绝对很好。使用一个对象,并将其称为'taskArray'很奇怪,但这不是一个错误。 – 2013-02-21 15:46:09

+0

是的,我刚刚拿起那本身!卫生署! – 2013-02-21 15:47:15

+0

编辑名称,抱歉关于= – BaconJuice 2013-02-21 15:48:17

8

There与您的代码没有问题。我建议你把它写成实用方法

function getValues(selector){ 
    var tempValues = {}; 
    $(selector).each(function(){ 
    var th= $(this); 
    tempValues[th.attr('title')] = th.val(); 
    }); 
    return tempValues; 
} 

var values = getValues('.email'); 

或者如果你想值到一个数组

$('.email').map(function(){return $(this).val(); }).get(); 

.get()将其转换为规则阵列。

你写的代码是绝对正确的。但是当我加载它时,我返回null,因为在执行时,文本框中没有值。

相关问题