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()ように入力します。console.log(id);- 予想される結果は「1」、「2」、「3」です。「3」だけの場合は、何らかの理由で他の入力が取得されていない可能性があります。それが結果である場合は、値を割り当てた後にオブジェクトを出力します: console.log(emailObj[id]);

于 2013-02-21T15:45:00.930 に答える