在我正在創建的表單上,我有多個選擇框,用戶可以從中選擇多個專案。就像我對表單上的所有其他輸入一樣。我創建了一個包含所有輸入型別選擇器的陣列,然后遍歷每個選擇器并檢查輸入更改。但是我遇到了多選輸入的問題。
// Multiselect
var multiSelect = [];
multiSelect.push('#specialties');
$.each(multiSelect, function(index, value) {
console.info({ value }); // Outputs: '#specialties'
// This fires
$('#specialities').change(function(){
console.info('test');
});
// This does not fire?
$(value).change(function(){
console.info('test');
});
});
在上面的代碼中,我創建了一個空陣列。然后我推送所有元素(為了簡單起見,我只有一個。)然后對于陣列中的每個專案,我輸出電流value以進行測驗。在控制臺中我可以看到它輸出'#specialties'
然后我想檢測這樣的變化:
$(value).change(function(){
console.info('test');
});
但由于某種原因,它沒有檢測到變化。每當我輸入 ID 而不是value它會觸發。
$('#specialties').change(function(){
console.info('test');
});
任何人都知道這是為什么。據我所知,value和'#specialties'是完全一樣的東西。但我不是什么都知道,所以在問這個問題時我可能會學到一些新東西。
問題是錯別字
我的代碼不起作用,因為我在第三行犯了一個可怕的錯字。我寫了#specialties,我應該寫#specialities通知額外的 i。
盡管如此,mplungjan 提供的解決方案是我接受的解決方案。雖然,它完全忽略了陣列。
uj5u.com熱心網友回復:
您的代碼有效
顯示代碼片段
// Multiselect
var multiSelect = [];
multiSelect.push('#specialties');
$.each(multiSelect, function(index, value) {
console.info({value}); // Outputs: '#specialties'
// This ALSO fires
$(value).change(function() {
console.info('test');
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<select id="specialties" multiple>
<option value="">Please select</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
這里有更好的版本
$(function() {
$("#container").on("change", "select", function(e) {
const selectedValues = $(this).val();
console.log(Array.isArray(selectedValues) ? selectedValues.join(",") : selectedValues)
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div id="container">
<select id="specialties" multiple>
<option value="">Please select</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
</div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485388.html
上一篇:DatatablesfooterCallback,排除行并將其與JSON資料相加
下一篇:全屏選單打開時頁面跳轉到頂部
