ฉันขอแนะนำให้หลีกเลี่ยง JavaScript ในบรรทัด:
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].onclick = function() {
var check = confirm("Are you sure you want to leave?");
if (check == true) {
return true;
}
else {
return false;
}
};
}
สาธิต JS ซอ
การปรับปรุงข้างต้นเพื่อลดพื้นที่ แต่ยังคงความชัดเจน / ฟังก์ชั่น:
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].onclick = function() {
return confirm("Are you sure you want to leave?");
};
}
สาธิต JS ซอ
การปรับปรุงล่าช้าค่อนข้างที่จะใช้addEventListener()
(ตามที่แนะนำโดยbažmegakapaในความคิดเห็นด้านล่าง):
function reallySure (event) {
var message = 'Are you sure about that?';
action = confirm(message) ? true : event.preventDefault();
}
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].addEventListener('click', reallySure);
}
สาธิต JS ซอ
ด้านบนเชื่อมโยงฟังก์ชันกับเหตุการณ์ของแต่ละลิงก์ ซึ่งอาจสิ้นเปลืองมากเมื่อคุณสามารถผูกการจัดการเหตุการณ์ (โดยใช้การมอบหมาย) กับองค์ประกอบบรรพบุรุษเช่นต่อไปนี้:
function reallySure (event) {
var message = 'Are you sure about that?';
action = confirm(message) ? true : event.preventDefault();
}
function actionToFunction (event) {
switch (event.target.tagName.toLowerCase()) {
case 'a' :
reallySure(event);
break;
default:
break;
}
}
document.body.addEventListener('click', actionToFunction);
สาธิต JS ซอ
เนื่องจากการจัดการเหตุการณ์แนบมากับbody
องค์ประกอบซึ่งโดยปกติจะมีโฮสต์ขององค์ประกอบอื่นคลิกได้ฉันได้ใช้ฟังก์ชันชั่วคราว ( actionToFunction
) เพื่อกำหนดว่าจะทำอย่างไรกับการคลิกนั้น หากองค์ประกอบที่คลิกคือลิงค์ดังนั้นจึงมีองค์ประกอบtagName
ของa
การจัดการการคลิกจะถูกส่งผ่านไปยังreallySure()
ฟังก์ชั่น
อ้างอิง: