2017-10-04 62 views
2

我想要使用奇妙的jQuery插件來編輯一堆選擇框:https://github.com/indrimuska/jquery-editable-select構建一個所有選擇框的ID數組

第一步是獲取所有選擇框的ID。從http://jsfiddle.net/49rk6ph7/69/我都試過,但我沒有變:

[s1,s2] 

我怎樣才能得到這個工作?

var test = []; 
 
test = $("select").each(function() { 
 
    test.push($(this).attr('id')) 
 
}); 
 

 
console.log(test);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="select-editable"> 
 
    <select id="s1" onchange="this.nextElementSibling.value=this.value"> 
 
    <option value=""></option> 
 
    <option value="115x175 mm">115x175 mm</option> 
 
    <option value="120x160 mm">120x160 mm</option> 
 
    <option value="120x287 mm">120x287 mm</option> 
 
    </select> 
 
    <input type="text" name="format" value="" /> 
 
</div> 
 

 
<div class="select-editable"> 
 
    <select id="s2" onchange="this.nextElementSibling.value=this.value"> 
 
    <option value=""></option> 
 
    <option value="115x175 mm">115x175 mm</option> 
 
    <option value="120x160 mm">120x160 mm</option> 
 
    <option value="120x287 mm">120x287 mm</option> 
 
    </select> 
 
    <input type="text" name="format" value="" /> 
 
</div>

回答

3

與您的代碼的問題是因爲你分配到testeach()的結果,這是一個jQuery對象,而不是您最初定義數組。只需從該聲明中刪除test =即可。

請注意,您還可以通過使用map()而不是each()循環,去除與不顯眼的JS事件處理程序已經過時on*屬性的邏輯更簡潔。事情是這樣的:

var test = $("select").map(function() { 
 
    return this.id 
 
}).get(); 
 

 
console.log(test); 
 

 
$('#s1, #s2').change(function() { 
 
    $(this).next().val($(this).val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="select-editable"> 
 
    <select id="s1"> 
 
    <option value=""></option> 
 
    <option value="115x175 mm">115x175 mm</option> 
 
    <option value="120x160 mm">120x160 mm</option> 
 
    <option value="120x287 mm">120x287 mm</option> 
 
    </select> 
 
    <input type="text" name="format" value="" /> 
 
</div> 
 

 
<div class="select-editable"> 
 
    <select id="s2"> 
 
    <option value=""></option> 
 
    <option value="115x175 mm">115x175 mm</option> 
 
    <option value="120x160 mm">120x160 mm</option> 
 
    <option value="120x287 mm">120x287 mm</option> 
 
    </select> 
 
    <input type="text" name="format" value="" /> 
 
</div>

+0

只是我的理解,使用var測試= $( 「選擇」),是測試一個jQuery對象? – user61629

+0

沒錯。在您的原始代碼中,'test'將是'each()'返回的值,它是一個包含'select'元素的jQuery對象。在上面它將是一個從'.map()。get()'返回的字符串數組 –

5

您的jQuery調用之前刪除test =。您正在覆蓋您的原始test陣列。

這就是你需要:

var test = []; 

$("select").each(function() { 
    test.push($(this).attr("id")); 
}); 

console.log(test); 
相關問題