2014-09-19 24 views
2

我有這種類型的代碼:停止事件傳播的多個內聯函數JS

<button onclick="fn1();fn2();fn3()">Clic</button> 

我測試的東西在fn1的,如果這是真的,我不想FN2和FN3被調用。我在fn1中使用了event.stopPropagation()(以跨瀏覽器的方式將事件傳遞給函數),但其他函數仍然被調用。

任何人都可以幫忙嗎?

+0

你爲什麼不恰當地附加三個事件監聽器而不是一個? – Bergi 2014-09-19 15:20:57

回答

0

試試這個:

<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()不執行。

+0

謝謝。這工作。唯一不好的一點是,你需要保證回到真正的火力下一個崗位......但是這很好。謝謝。 – Fred 2014-09-25 09:41:52

1

這不是一個好的做法,但有一種方法。你可以拋出你自己的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> 
+0

嗨安德魯。謝謝,但確實有點難以發出錯誤^^ – Fred 2014-09-25 09:43:59

0

你可以簡單地有一個假設條件的按鈕類似以下提到的:

<button onclick="if(!fn1()){fn2();fn3()}">Click</button> 

Working Fiddle

+0

在你的JSFiddle中,如果你改變了onclick fn2和fn3仍然沒有被觸發,即使在fn1中返回true ... – Fred 2014-09-25 09:42:15

+0

hi @Fred:條件是if(!fn1())並且它在小提琴中返回true,所以它不會執行fn2和fn3,如果我們將返回值更改爲false,它將按照要求 – V31 2014-09-25 09:45:41

+0

@fred讓我更改返回值並在此評論中添加小提琴:http://jsfiddle.net/uhwgfzqd/1/ – V31 2014-09-25 09:46:18

1

你可以改變你FN1函數返回您執行的檢查的結果。然後你可以改變的onclick屬性:

if (!fn1()) { fn2(); fn3(); }; 

我還建議與.addEventListener(),而不是使用onclick屬性結識。