2014-09-19 8 views
2

나는이 코드 유형이 :중지 이벤트 전파 JS

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

난을 Fn1 뭔가를 테스트하고 사실이라면, 나는 Fn2를하고 fn3가 호출되고 싶지 않아. fn1에서 event.stopPropagation()을 사용했습니다 (브라우저 간 방식으로 이벤트를 함수에 전달). 그러나 다른 함수는 어쨌든 호출됩니다.

아무도 도와 줄 수 있습니까?

+0

하나가 아닌 3 개의 이벤트 리스너를 올바르게 연결하면 어떨까요? – Bergi

답변

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

1

좋은 방법은 아니지만 방법이 있습니다. 실행을 막기 위해 예외를 던질 수 있습니다. 당신은 당신을 Fn1을 변경할 수 있습니다

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

Working Fiddle

+0

안녕하세요 앤드류. 감사하지만 사실 오류가 발생하기가 어렵습니다. ^^ – Fred

0

이 아니라고 함수는 수행 한 점검 결과를 리턴합니다. 나는 또한 .addEventListener() 대신의 OnClick 속성을 사용에 익숙해지고 추천

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

: 그런 다음에 온 클릭 속성을 변경할 수 있습니다.

+0

JSFiddle에서 onclick을 으로 바꾼 경우 fn1에서 반환 true 인 경우에도 fn2와 fn3은 여전히 ​​실행되지 않습니다 ... – Fred

+0

안녕하세요 @Fred : 조건은 if (! fn1())이며 실행되지 않도록 피들에서 true를 반환합니다. fn2 및 fn3으로 변경하고 반환 값을 false로 변경하면 요구 사항이 – V31

+0

@fred로 실행됩니다. 반환 값을 변경하고이 주석에서 피들을 추가합니다. – V31

1

: 난 당신이 단순히 아래에 언급 된 것과 유사한 버튼의 경우 조건을 가질 수 있습니다 다시 그것이 좋은 연습

<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>