我有這種類型的代碼:停止事件傳播的多個內聯函數JS
<button onclick="fn1();fn2();fn3()">Clic</button>
我測試的東西在fn1的,如果這是真的,我不想FN2和FN3被調用。我在fn1中使用了event.stopPropagation()(以跨瀏覽器的方式將事件傳遞給函數),但其他函數仍然被調用。
任何人都可以幫忙嗎?
我有這種類型的代碼:停止事件傳播的多個內聯函數JS
<button onclick="fn1();fn2();fn3()">Clic</button>
我測試的東西在fn1的,如果這是真的,我不想FN2和FN3被調用。我在fn1中使用了event.stopPropagation()(以跨瀏覽器的方式將事件傳遞給函數),但其他函數仍然被調用。
任何人都可以幫忙嗎?
試試這個:
<html>
<head>
<script>
function fn1() {
alert('fn1()');
return false;
}
function fn2() {
alert('fn2()');
return true;
}
function fn3() {
alert('fn3()');
window.location.assign("http://www.google.com");
}
</script>
</head>
<body>
<button onclick="fn1()&&fn2()&&fn3()">Click</button>
</body>
</html>
所有功能應該返回布爾 然後用邏輯運算符& &內的onclick
<button onclick="fn1()&&fn2()&&fn3()">Click</button>
,你可以看到,如果fn1的()返回false F2()和f3()不執行。
謝謝。這工作。唯一不好的一點是,你需要保證回到真正的火力下一個崗位......但是這很好。謝謝。 – Fred 2014-09-25 09:41:52
這不是一個好的做法,但有一種方法。你可以拋出你自己的Exceptions來停止執行。我再說一遍這不是一個好的做法
<script type="text/javascript">
function one(){
var a = 1;
console.log('one');
if(a == 1){
throw new RangeError("Sorry, but you are too young for this movie");
}
}
function two(){
console.log('two');
}
</script>
<button onclick="one();two();">Click me.</button>
嗨安德魯。謝謝,但確實有點難以發出錯誤^^ – Fred 2014-09-25 09:43:59
你可以改變你FN1函數返回您執行的檢查的結果。然後你可以改變的onclick屬性:
if (!fn1()) { fn2(); fn3(); };
我還建議與.addEventListener(),而不是使用onclick屬性結識。
你爲什麼不恰當地附加三個事件監聽器而不是一個? – Bergi 2014-09-19 15:20:57