2009-03-23 8 views
2

나는 미적 목적으로 prompt()을 사용하고있다. 시각적 인면에서는 꽤 멋지게 나옵니다.하지만 약간의 문제가 있습니다. 네이티브 버전의 함수는 프롬프트가 처리 될 때까지 코드 실행이 완전히 중단되도록합니다.JavaScript의 prompt()의 기본 동작을 복제 할 수 있습니까?

이 적극적으로 사랑하고 아래가 수행하는 방식으로 작동 이유는 다음과 같습니다 내 방법으로

<script> 
var c = prompt('Name?', ''); 
alert(c); // displays whatever the user entered 
</script> 

은, 그러나, 상황이 원활하지 않습니다. 대화 상자, 입력 상자 및 "확인"단추를 사용하여 사용자로부터 데이터를 수집합니다. 내 지식으로는 데이터 수집이 완벽하게 작동합니다. 즉, 사용자가 "확인"버튼을 누르면 프롬프트에 넣은 데이터에 액세스 할 수 있다는 것을 알았습니다.

그러나 내 버전이 원래대로 작동하도록하는 방법을 찾을 수는 없습니다. 내 질문은 다음과 같습니다. 자바 스크립트를 다시 시작하라는 메시지가 나타날 때까지 실행을 중단하도록 자바 스크립트에 지시하는 것이 가능한가?

모든 도움을 주셔서 미리 감사드립니다.

답변

6

아니요,이 동작을 복제 할 수 없습니다. 같은 효과를 얻을 수있는 방법은 코드에 콜백을 사용하는 것입니다, 그래서 당신은 같은 것을 수행 할 수 있습니다

myPrompt('Hello, mate, whats yer name?', function(answer) { 
    alert(answer); 
}); 

편집을 : 코드에 따라이 왜하지?

<body> 
<div id="prompt" style="display: none;"> 
<input type="text" id="q" /> <input type="button" value="OK" id="ok" /> 
</div> 
<script> 
$ = function(i) {return document.getElementById(i);} 

_prompt = function(prompt, callback) { 
    $('prompt').style.display = ''; 
    $('q').value = ''; 
    $('ok').onclick = function() { 
     callback($('q').value); 
    } 
} 

_prompt('Name?', function(answer) { 
    alert(answer); 
}); 
</script> 
</body> 

당신이, 당신은 자바 스크립트 코드에 다른 곳에 액세스 할 수 gAnswer라는 이름의 전역 변수를 만들어 프롬프트가 이미 응답 한 가정 할 것이다 (더 var 선언을 알 수 없음) ... gAnswer = answer; 말을 alert(answer);를 변경하는 경우. 공간을 오염시키는 전역 변수에 관심이 있다면 닫으면 모두 감쌀 수 있지만 그렇지 않으면 괜찮습니다.

+0

Ack! 내가 생각한대로 나중에 사용하기 위해 값을 저장할 방법이 없습니다. 그렇습니까? –

+0

당신은 무엇을 성취하려고합니까? 변수를 전역 변수로 만들고 콜백 내부에 변수를 설정하면 나중에 액세스 할 수 있습니다. –

+0

그게 문제 야, 친구 ... 할 수 없어. : –

0

@Paolo가 :

이 내가 현재 함께 일하고 코드입니다 : 예상되는 바와 같이,

<body> 
<div id="prompt" style="display: none;"> 
<input type="text" id="q" /> <input type="button" value="OK" id="ok" /> 
</div> 
<script> 
$ = function(i) {return document.getElementById(i);} 
_prompt = function(q, e) 
{ 
    $('prompt').style.display = ''; 
    $('q').value = ''; 
    $('ok').setAttribute('onclick', e + ' $("prompt").style.display = "none";'); 
} 
var c; _prompt('Name?', 'c = $("q").value;'); 
alert(c); 
</script> 
</body> 

자, 경고() 빨리 페이지가로드 될 때 화재, 어떤이다 가장 확실하게 내가 원하는 것이 아닙니다. 이상적으로는 나머지 코드가 프롬프트가 처리 될 때까지 기다리는 것이 좋겠지 만 이는 네이티브 구현 외부에서 가능하다는 사실을 강력히 압니다. 내가 프롬프트 알고리즘을 즉시 사용하도록 알고리즘을 설계하는 데 정착해야 할 것인가?