2013-07-09 28 views
0

e.target指向一個表單元素。我試圖遍歷每個輸入元素並收集名稱和值,所以我可以將它們作爲參數傳遞給a .load().each()迭代器永遠不會找到<input>元素,因此退出而不處理任何內容。該表格包含一個包含輸入的div元素。爲什麼不能.each()找到子元素?

var formData = {}; 
$(e.target).has(":input").each(function(){ 
    formData[$(this).name] = $(this).value; 
}); 

的HTML表單:

<div id="partner-settings-form" class="ui-dialog-content ui-widget-content" scrolltop="0" scrollleft="0" style="display: block; width: auto; min-height: 67.6875px; height: auto;">   
<article class="sign_in form-dialog clearfix"> 
     <div class="bg-form-dlg"> 
     <div class="col_100 clearfix"> 
<h2>UPS Shipping Information</h2> 
<form enctype="application/x-www-form-urlencoded" class="sign_in_form sign_up_form" action="" method="post"><div class="zend_form"> 

<input type="hidden" name="partnerId" value="2" id="partnerId"> 
<div class="shippingdetails"><fieldset id="fieldset-account"> 
<div id="key-label" class="formlabel"><label for="key" class="required">Access Key: *</label></div> 
<div id="key-element" class="formcontent"> 
<input type="text" name="key" id="key" value="..."></div> 
<div id="id-label" class="formlabel"><label for="id" class="required">User ID: *</label></div> 
<div id="id-element" class="formcontent"> 
<input type="text" name="id" id="id" value="..."></div> 
<div id="password-label" class="formlabel"><label for="password" class="required">Password: *</label></div> 
<div id="password-element" class="formcontent"> 
<input type="text" name="password" id="password" value="..."></div> 
<div id="account_number-label" class="formlabel"><label for="account_number" class="required">Account Number: *</label></div> 
<div id="account_number-element" class="formcontent"> 
<input type="text" name="account_number" id="account_number" value="..."></div> 
<div id="address1-label" class="formlabel"><label for="address1" class="required">Address1: *</label></div> 
<div id="address1-element" class="formcontent"> 
<input type="text" name="address1" id="address1" value="..."></div> 
<div id="address2-label" class="formlabel"><label for="address2" class="optional">Address2:</label></div> 
<div id="address2-element" class="formcontent"> 
<input type="text" name="address2" id="address2" value=""></div> 
<div id="phone-label" class="formlabel"><label for="phone" class="required">Phone: *</label></div> 
<div id="phone-element" class="formcontent"> 
<input type="text" name="phone" id="phone" value="..."></div> 
<div id="city-label" class="formlabel"><label for="city" class="required">City: *</label></div> 
<div id="city-element" class="formcontent"> 
<input type="text" name="city" id="city" value="Los Angeles"></div> 
<div id="state-label" class="formlabel"><label for="state" class="required">State (code): *</label></div> 
<div id="state-element" class="formcontent"> 
<input type="text" name="state" id="state" value="CA"></div> 
<div id="country-label" class="formlabel"><label for="country" class="optional">Country:</label></div> 
<div id="country-element" class="formcontent"> 
<select name="country" id="country" class="dlg-select"> 
    <option value="US" label="UNITED STATES" selected="selected">UNITED STATES</option> 
    <option value="AF" label="AFGHANISTAN">AFGHANISTAN</option> 
    <option value="..." label="...">...</option> 
</select></div> 
<div id="postal-label" class="formlabel"><label for="postal" class="required">Postal Code: *</label></div> 
<div id="postal-element" class="formcontent"> 
<input type="text" name="postal" id="postal" value="90036"></div></fieldset></div> 
<div> 
<p><label id="configship-label">&nbsp;</label> 
<input type="submit" name="configship" id="configship" value="Save Information"></p></div></div></form></div> 
</div> 
</article> 

    </div> 
+0

'$(e.target)。兒童( 「輸入」)每個(函數(){FORMDATA [$ (this).name] = $(this).value;});' –

+1

'formData'到底是什麼? – 2013-07-09 10:41:19

+0

順便說一句,'$ .has()'返回布爾值,如果選擇器匹配並在父選擇器內找到。你應該使用:'$ .find()'來代替。 – 2013-07-09 10:42:30

回答

2

嘗試不同則

$(e.target).find('input').each(); 
+1

試過這個。不工作。 –

+0

你有什麼其他想法嗎?請查看我的表單html以獲得更好的理解。 –

3

使用.serialize()對於這一點,沒有必要重新發明輪子,夥計。

$(e.target).serialize(); 

編輯:

由於.load()請求獲取與查詢字符串,和POST與物體,.serialize()不會削減它。解決方法是要麼使用阿賈克斯()或者調整你的代碼,因爲你得到了錯誤:

var formData = {}; 
$(e.target).find('input').each(function() { 
    formData[$(this).attr('name')] = $(this).val(); // .attr('name') and .val() instead. 
}); 
+0

Doen't序列化給你一個查詢字符串? ('a = b&c = d')想想op希望:'{a:'b',c:'d'}' – andlrc

+0

他想將它傳遞給load(),並且由於它已經是一個URL編碼的字符串,它會工作。 – Eric

+0

取決於服務器端必須執行的操作...如果這些值應該位於同一個命名空間下,那麼您的示例將起作用:'{payload:{a:'b',c:'d'}}' - >'payload [a] = b&payload [c] = d' – andlrc

相關問題