2012-11-23 2 views
0

그래서 jquery와 jquery.transit을 사용하여 간단한 상자를 회전시키고 있습니다.jQuery 함수가 클릭하기 전에 시작됩니다. 이유가 무엇입니까?

다른 이름이 지정된 함수를 호출하는 기본 .click 함수로 작업하고 있습니다. 그러나 버튼을 클릭하기 전에 (즉, 페이지가로드 될 때마다) 명명 된 함수가 실행되고 왜 이런 일이 발생하는지 궁금해하며 어떻게 해결할 수 있습니까? 여기

는 jsfiddle입니다 : http://jsfiddle.net/kdLSS/1/

내 코드 : 상태에있는 사람들을 위해 너무 많은

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
    div { 
     background-color:yellow; 
     width:100px; 
     border:1px solid blue; 
     position:absolute; 
     left:50px; 
    } 
    </style> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js'></script> 
    <script src='jquerytransit.js'></script> 
    <title>test</title> 
</head> 
<body> 
    <script> 
    $(function() { 
     function hello() { 
     $("#block").transition({ 
      perspective: '0px', 
      rotateY: '180deg' 
     }, 100); 
     } 

     $("#go").click(hello()) 
    }); 
    </script> 
    <button id="go"> Run</button> 
    <div id="block">Hello!</div> 
</body> 
</html> 

감사하고 행복한 감사!

답변

5

이벤트 처리기 할당을 수정하십시오. 다음과 같아야합니다.

$("#go").click(hello); 

// not $("#go").click(hello()); 

hello 기능에 대한 참조를 전달하려고합니다. hello 함수의 결과를 전달하고 싶지는 않습니다.

+0

이제 함수는 어떻게 호출됩니까? –

+0

@sheldonCooper : 요소를 클릭하면 브라우저가 함수를 호출합니다. '.click' 메서드는 함수를 호출하지 않습니다. 이벤트가 발생할 때 수행 할 작업을 등록 만합니다. 그래서 함수 참조를 원합니다. – slebetman

+0

위대한 작품, 감사합니다. – genuinelycurious

1

자바 스크립트에서 함수 이름 뒤에()를 추가하면 해당 함수가 즉시 실행됩니다. 당신은 클릭 이벤트에 함수를 할당 할 obmit 제() #go이

0

@Le 마르신

을 클릭하면

$("#go").click(hello); 

가 그런 다음 함수가 실행됩니다

있습니다 귀하가 수행 한 몇 가지 기본적인 실수입니다. function hellodocument.ready 내에 반품하고 대괄호를 올바르게 닫지 않은 것처럼 말입니다. 따라서 귀하의 Dom이 준비되면 실행되도록 처리됩니다.

수정 된 스크립트.

$(function() { 
    $("#go").click(function() { 
     hello(); 
     alert("Hi") 
    }); 
}); 

function hello() 
{ 
    $("#block").transition({ perspective: '0px', 
    rotateY: '180deg' }, 5000); 
}​ 
+0

대괄호가 올바르게 닫히지 않았습니다. 형식이 잘못되었습니다. – slebetman

관련 문제