4

我面临以下问题:

<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="a@a.com"}

我的预期结果应该如下所示

Object { 1="a@a.com", 2="b@b.com", 3="c@c.com"}

有人可以为我解释一下这个问题吗?

感谢您的阅读,问候。

4

2 回答 2

9

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

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,因为在执行时,文本框中没有值。

于 2013-02-21T16:21:44.393 回答
0

taskArray实际上是一个对象,而不是一个数组。

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

var taskArray = new Array();

编辑:再想一想,你已经拥有的是完全有效的!

我正在编辑我的答案以回应我在评论中所说的话:您需要使用控制台进行调试:

.each(), put: console.log(id);- 预期结果将是“1”、“2”、“3” - 如果只是“3”,则可能意味着您的其他输入无论出于何种原因都没有被拾取。如果这是结果,请在分配值后打印出对象:console.log(emailObj[id]);

于 2013-02-21T15:45:00.930 回答