我試圖通過創建一個包含一些文本和複選框輸入的範圍來創建帶按鈕的複選框。防止在原始JavaScript(而不是JQuery)中冒泡JavaScript
我想要的交互方式是,只要點擊「按鈕」或複選框,複選框的狀態就會切換。
但是,我受到泡沫問題的困擾,我無法弄清楚如何解決這個問題,因爲這裏的所有解決方案似乎都是JQuery解決方案 - 我期待這樣做的是原始JS。
我至今是:
HTML:
<span id="myCBbutton" class="CBbutton" onClick="toggleIt(event);">Toggle Me <input type="checkbox" id="myCheckBox" onClick="toggleIt(event);event.stopPropagation();"></span>
CSS:
.CBbutton {
border: solid 1px black;
border-radius: 3px;
background-color: silver;
padding: 2px;
cursor: pointer;
}
和JS:
function toggleIt(event) {
var checkBox = document.getElementById('myCheckBox');
if (checkBox.checked) {
alert("before: it's checked!");
} else {
alert("before: NOT checked");
}
checkBox.checked = (checkBox.checked)?false:true;
if (checkBox.checked) {
alert("after: it's checked!");
} else {
alert("after: NOT checked");
}
event.stopPropagation();
return false;
}
我還創建了一個小提琴here。
我想從其他問題和答案,解決辦法是要麼event.preventDefault()
或event.stopPropagation()
有或沒有return false
但我只是無法得到這個工作。
在這裏發佈的代碼,不只是在小提琴 –
您的問題不是與傳播,它是複選框狀態改變在點擊事件觸發處理程序之前。因此,當您單擊複選框本身時,其狀態在事件到達處理程序時已經「檢查」,處理程序然後轉向並取消選中它。如果你點擊跨度,你的複選框還沒有被選中,並且處理程序會檢查它。 – gfullam