2016-10-12 3 views
1

js 파일 (및 jquery 라이브러리 파일)에 올바르게 연결된 html 파일이 있습니다. 의 js 파일 내부onclick 이벤트가 jQuery 함수를 실행하지 않습니다.

<input type="button" onclick="practice();" id="intro_next_button" value="Practice"/> 

: 그것은 그 안에있을 때

$(window).load(function(){ 
    function practice(){ 
     alert("WORKS"); 
    } 
});  

이 기능 연습은 $(window).load(function()의 외부에있는 경우 실행,하지만. 이것에 대한 많은 비슷한 질문이 있지만, onclick event에 대해서 jquery 내부에서만 작동하지 않는 것을 발견하지 못했습니다. $(window).load(function().

+0

때문이다. 왜 그것이 온로드에 정의되어 있습니까? 그것을 밖으로 이동하십시오. – epascarello

+0

오, 나는 그것이 작동하는지 확인하기 위해 모든 것을 onload 함수에 넣어야한다는 인상하에있었습니다. –

+0

그럴리가 없다 – epascarello

답변

2

함수 블록 내부에 정의 된 키워드 (function 또는 var를 통해)가 해당 블록을 범위로 적용하기 때문에 이는 작동하지 않습니다. 그래서 블록 안에 변수 x를 만들면 거기에 값이 없습니다.

var x = 2; 
function test() { var x = 5; } 
console.log(x); 

인쇄

이 2도 스타일을 경쟁하고있다. 일반적으로 window.onload 또는 "jQuery $ (document) .ready"를 사용하면 함수 본문에 이벤트를 바인딩합니다.

$("#intro_next_button").click(function() { alert("WORKS"); }); 
2

당신이하는 일은 load()에 매개 변수로 전달되는 함수 내에 함수를 정의하는 것입니다.

onclick이 창 범위에서 연습()을 찾고 있습니다.

왜 페이지를로드 할 때 함수를 정의 하시겠습니까? 사용자가 클릭 할 수 있도록로드 될 때까지 기다리는 중입니까? 그렇다면,이 시도 :

$(window).load(function(){ 
    window.practice = function(){ 
    alert("WORKS"); 
    } 
}); 
+0

onclick에서'window.practice' 함수를 어떻게 호출할까요? 윈도우에서 무언가를 정의 할 때'onclick = "practice()"'및'onclick = "window.practice()"' –

+0

을 시도했습니다. window.functionname()을 호출 할 필요가 없음 기본적으로 범위없이 정의하는 모든 것이 윈도우에 정의됩니다. :) 이 코드에서 시도하십시오 : function test() {}; console.log ('무엇?', window.test); –

1

을이 경우에 당신의 기능은 당신이 load에 정의 된 anonimous 함수 내에서 볼 수 있습니다. 당신은 (그리고 onclick 속성을 제거)를 load 내부 JQuery와 click를 사용하여 버튼에 onclick 이벤트를 첨부해야한다 : 함수가 온로드의 블록 범위에 글로벌 아니다

$('#buttonid').click(function(){practice();}); 
+0

내 것이 아니라면 우리의 하이브리드도 괜찮을 것입니다 : $ (document) .load (function() { $ ('# buttonid') 클릭 (}); –

관련 문제