2013-03-30 2 views
3
$(document).ready(function() { 

var v = $("input[name=link]").val(); 

$('p').on('click', function() { 
    console.log(v); 
    console.log('hello'); 

}) 
}); 

위의 내용은 필자가 작성한 jQuery/JS 코드입니다. 단락을 클릭하면 입력 필드에서 값을 가져 와서 콘솔에 출력합니다.jQuery/Javascript 전역 변수 및 지역 변수 혼동 - 기본

이미 전역 변수로 v을 선언했지만 콘솔에 인쇄하지 않습니다. 그것은 로컬 변수를 만드는 함수에 var v 선언을두면 작동합니다. 왜 이런 식으로? 전역 변수가 항상 전체 코드에서 작동한다고 생각했습니다. Pls이 날에 대한 교육.

답변

4

이것은 범위 문제가 아니며, v은 jQuery에 이벤트 핸들러로 제공하는 콜백에서 완벽하게 볼 수 있습니다.

코드의 문제점은 문서가 준비되는대로 즉시 v이 평가된다는 것입니다. 입력 값을 변경하면 v은 변경되지 않으며 처음 비어있는 경우 계속 비어있게됩니다. v은 입력 필드에 대한 일종의 포인터가 아니므로 입력이 변경되면 변경할 필요가 없습니다.

클릭시 필드의 값을 확인하려면이 코드를 사용, 사용됩니다

$(document).ready(function() { 
    $('p').on('click', function() { 
     var v = $("input[name=link]").val(); 
     console.log(v); 
     console.log('hello'); 
    }) 
}); 
+0

오 야 ... FACEPALM 나 자신. 잊지 말고 로컬로 유지하거나 keyup() 함수를 추가 할 것입니다. keyup() 대신 입력 필드의 변경을 감지하는 것이 더 좋습니다. –

+1

@ArmeshSingh 'change'이벤트를 더 잘 사용하십시오 : '$ ("input [name = link]"). ('change ', function() {console.log ($ (this) .val())}); '. –

0

문제 당신이 textbox

의 텍스트를 변경 한 후 v 값을 변경 have'nt입니다

준비가되면 textbox.ie 값을 비워 둡니다.

아래 코드를 참조하십시오.

var v = 10; 
    alert("" + v); 
    myFunction(); 

    function myFunction() 
     { 
     v = 20; 
     } 

    alert("" + v);