function quchong(e) {
$("#d1 input").each(function() {
if ($(this).val() == $(e).val()) {
return false; // 這裡返回的是 each 的回調函數,不是 quchong!
}
});
// quchong 這裡無返回值 → undefined
}
jQuery.each(callback) / Array.forEach(callback) 的 **callback 返回值只能控制迭代繼續/中斷** (`return false` 相當於 `break`,`return true` 相當於 `continue`)**,無法向外層函數傳遞返回值**。
function quchong(e) {
let duplicated = false; // 外層變量
$("#d1 input").each(function() {
if ($(this).val() == $(e).val()) {
duplicated = true;
return false; // 中斷 each
}
});
if (duplicated) return false;
// 其他邏輯...
return true;
}
// 原生 JS 數組 (推薦)
const inputs = Array.from(document.querySelectorAll('#d1 input'));
const duplicated = inputs.some(input => input.value === e.value);
if (duplicated) return false;
// 或 jQuery 轉數組
const duplicated = $('#d1 input').toArray().some(input => input.value === e.value);
const matched = $('#d1 input').filter(function() {
return $(this).val() === $(e).val();
});
if (matched.length > 0) return false;
function quchong(e) {
const $e = $(e);
const val = $e.val();
const clickHandler = $e.attr('onclick');
if (clickHandler === 'moveDiv1(this)') {
// 判斷 d1 區域是否已有相同 value
const duplicated = $('#d1 input').toArray().some(input => input.value === val);
if (duplicated) return false;
}
if (clickHandler === 'moveDiv2(this)') {
// 業務邏輯...
return false;
}
return true; // 默認允許
}
掌握「迭代方法返回值語義區別」,JS 邏輯 Bug 率大幅下降。