2013-02-13 123 views
0

爲什麼不是這個代碼給我一個帶有作爲文本輸入的id s的鍵的對象,並將這些值作爲文本輸入的值?將html輸入值放入javascript對象

JS

$(document).ready(function() { 
    $('body').on('click', '#btn', function() { 
     var address = {}; 
     $('input[type="text"].address').each(function (index, element) { 
      address[element.id] = $(element).val(); 
     }); 
     console.log(address); 
    }); 
}); 

HTML

<input class="address" id="attn" value="john doe"> 
    <input class="address" id="address_1" value="1234 sample st"> 
    <input class="address" id="address_2" value="Suite 1"> 
    <input class="address" id="city" value="chicago"> 
    <input class="address" id="state" value="IL"> 
    <input class="address" id="zip" value="12345"> 
    <input class="address" id="country" value="US"> 
    <input type="button" id="btn" value="btn" /> 

jsbin

+0

我們能看到你的HTML? – 2013-02-13 15:25:31

+0

@ExplosionPills增加了它。 – 1252748 2013-02-13 15:27:02

回答

2

這是因爲你的投入沒有type="text"因此$('input[type="text"].address')不返回任何東西。

最好添加它們來表示輸入是文本類型。

+0

但是,即使添加了它,我仍然只是在控制檯中獲取Object Object。 http://jsbin.com/osufok/2/edit – 1252748 2013-02-13 15:29:35

+1

@thomas:展開它,你會看到它的屬性。你的例子適用於我。 – Bergi 2013-02-13 15:32:57

+0

很酷。非常感謝。 – 1252748 2013-02-13 15:35:35

2

您的輸入沒有[type=text]屬性,因此您的選擇器不匹配它們。簡單地將其刪除,或者使用:text選擇:

var address = {}; 
$(':text.address').each(function (index, element) { 
    address[element.id] = element.value; 
}); 
console.log(address); 

updated demo

0

使用this

$('input.address').each(function() {  
     address[this.id]= $(this).val(); 
}); 

演示http://jsbin.com/osufok/12/edit

+0

downvote的原因? – Anton 2013-02-13 15:34:01

+0

不知道爲什麼你得到一個downvote,但你能解釋爲什麼使用'this'會更好jQuery的'each(index,element){}'?謝謝! – 1252748 2013-02-13 15:37:02

+0

那麼,它不是更好,但在這種情況下,索引和元素不需要 – Anton 2013-02-13 15:37:47

1

jQuery的屬性選擇器(以及瀏覽器的查詢選擇)使用DOM元素而不是它們的屬性。如果您在輸入元素上沒有明確指定type屬性聲明,則$("[type]")document.querySelector("[type]")將找不到該元素,即使其類型爲屬性texthttp://jsfiddle.net/g76UC/)。

最簡單的解決方案是將type=text添加到HTML中的輸入元素。另一種是使用不需要此屬性定義的不同選擇器。最後(也是最不可取的)是創建一個單獨的選擇器,例如:prop,它檢查元素的類型屬性。但是,這已經以jQuery的:text的形式存在。

+0

Gotcha。非常有意義。謝謝。 – 1252748 2013-02-13 15:37:47

0

試試這一個http://jsfiddle.net/adiioo7/TPYtg/

$(document).ready(function() { 
    $('#btn').on('click', function() { 
     var address = {}; 
     $('.address').each(function (index, element) { 
      address[element.id] = $(element).val(); 
     }); 
     console.log(address); 
    }); 
});