2016-07-03 3 views
1

자체 호출하는 자바 스크립트 파일을 가지고 있고 내 onClick 이벤트에서 moduleID를 얻으려고합니다.jQuery 자체 호출 함수는 변수에 액세스 할 수 없습니까?

내가 뭘 잘못하고 있니? 또 하나주의해야 할 점은 이러한 파일 중 일부가 자체 widget으로 포함된다는 것입니다. 이 변수 선언을 위와 같이 전역 변수로 만들면 모듈 위임 변수를 선언하는 다른 위젯과 간섭을 일으키는 지 궁금하다.

$(function() { 

    // Define our vars 
    var moduleID = 4, 
     output = ''; 

... Some more stuff ... 

}); 

//Listen for button click 
$('[name=adminSearchGo]').click(function() { 
    alert(moduleID); // No Access 
}); 
+0

질문에서 함수는'.ready()'를 호출합니다. IIFE. 'moduleID'는'.ready()'핸들러 내에서 사용 가능합니다 – guest271314

+0

다른 스코프 때문에 접근 할 수 없습니다. 그러나'module-id'를 요소 자체 ('data-module-id = "4"')로 유지할 수 있다면'$ (this) .data ('module-id')'또는 '$ (this) .attr ('data-module-id')'. –

+0

또는 앞의 함수 내에서 click 이벤트 ('$ ('[name = adminSearchGo]')를 클릭하십시오.)'moduleID'가 정의되어 있습니다. –

답변

1

함수 내에 정의 된 것은 함수 밖에서 액세스 할 수 없습니다.

당신이 .. 당신이이 변수를 볼 수 있도록 $(function(){...}) 내부 바인딩 넣어 또한

$(function() { 

    // Define our vars 
    var moduleID = 4, 
     output = ''; 

    //Listen for button click 
    $('[name=adminSearchGo]').click(function() { 
    alert(moduleID); // No Access 
    }); 

}); 

을 수행 할 수 있습니다,이 스크립트를 넣어, 실행 위치에 따라 당신의 .click 외부 바인딩 $(function(){...}) 잠재적으로 작동하지 않습니다 요소가 아직 존재하지 않을 수도 있기 때문입니다. 의 모든 목적은 DOM이 준비되었을 때 함수를 호출하는 것입니다.

+0

이 줄에 약간 혼란 스러워요. 같은 범위에있을 수 있도록 $() 콜백 내부 처리기. " – SBB

0

jQuery가 아니라 javascript 변수 범위에 관한 것입니다.
이 참조 할 수 있습니다 : 그것은이 모듈 내부에 함께 하나 개의 모듈의 모든 행동을 넣어 더 나은 그래서
솔루션에 관해서는 What is the scope of variables in JavaScript?

, 당신은이 파일을 위젯으로 포함되어 있다고 말한다. 이와 같이 :

$(function() { 

    // Define our vars 
    var moduleID = 4, 
     output = ''; 

    ... Some more stuff ... 


    //Listen for button click 
    $('[name=adminSearchGo]').click(function() { 
     alert(moduleID); 
    }); 
}); 
0

질문시 기능은 IIFE가 아니라 .ready()입니다. moduleID.ready() 처리기 내에서 사용할 수 있지만 을 moduleID, outputdocument에 배열하여 document.data() 개체로 연결할 수도 있습니다. 별도의 .ready() : $(function(){}) 핸들러를 사용하여 .data()을 설정하십시오. 모든 VARS (a 같은, B, C) $(function(){})

$(function() { 
 

 
    // Define our vars 
 
    var moduleID = 4, 
 
    output = ''; 
 
    $(this).data({ 
 
     "moduleID": [moduleID], 
 
     output: [output] 
 
    }) 
 
    // ... Some more stuff ... 
 

 
}); 
 

 
$(function() { 
 

 
    // Define our vars 
 
    var moduleID = 5, 
 
    output = "abc"; 
 
    $(this).data().moduleID.push(moduleID); 
 
    $(this).data().output.push(output); 
 
    // ... Some more stuff ... 
 

 
}); 
 

 
$(function() { 
 
    // Define our vars 
 
    var moduleID = 6, 
 
    output = "def"; 
 
    $(this).data().moduleID.push(moduleID); 
 
    $(this).data().output.push(output); 
 
    //Listen for button click 
 
    $("[name=adminSearchGo]").click(function() { 
 
    alert($(document).data().moduleID[0]); // No Access 
 
    }); 
 
    console.log($(document).data()) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="button" name="adminSearchGo" value="click" />

0

$ (함수() {VAR의 A, B, C}) : 현재 thisdocument 핸들러 .ready() 내에 참고 함수 내부에 정의 된 함수는 외부에서 사용할 수 없습니다.이 함수를 인클로저로 간주 할 수 있습니다. 1. var를 전역 변수로 정의하십시오. 2. "window.xxx = var (a, b, c와 유사)"와 같은 var을 내 보냅니다. 3. var에 액세스 할 수있는 함수를 내 보냅니다.

관련 문제