2009-03-23 4 views
2

Я запускаю свою собственную версию подсказки() для эстетических целей; это пришло довольно хорошо, поскольку визуальные эффекты идут, но я столкнулся с небольшим затруднением: встроенная версия функции приводит к тому, что выполнение кода прекращается полностью до тех пор, пока запрос не будет рассмотрен.Возможно ли дублировать собственное поведение JavaScript()?

Это положительно прекрасный и поэтому ниже работает так, как это делает:

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

С моим методом, однако, дела идут не так гладко. Я использую диалоговое окно, поле ввода и кнопку «ОК» для сбора данных от пользователя; Насколько мне известно, сбор данных отлично работает; то есть я точно знаю, что после того, как пользователь нажмет кнопку «ОК», у меня есть доступ к данным, которые они только что ввели в подсказку.

Я не могу, однако, найти способ заставить мою версию работать как родной. Поэтому мой вопрос заключается в следующем: можно ли вообще сказать JavaScript, чтобы остановить выполнение, пока вы не попросите его возобновить?

Заранее благодарим за любую помощь.

ответ

6

Нет, дублировать это поведение невозможно. Способ добиться того же эффекта является использование обратного вызова в коде, так что вы можете сделать что-то вроде:

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

EDIT: на основе кода, почему бы не сделать это?

<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> 

Если изменить alert(answer); сказать ... gAnswer = answer; (не заметить не var декларации) вы бы создать глобальную переменную с именем gAnswer, что вы могли бы получить доступ где-либо еще в яваскрипта коде, если предположить, что приглашение уже был дан ответ. Если вас беспокоят глобальные переменные, загрязняющие ваше пространство, вы можете обернуть все это в закрытие, но в противном случае это будет нормально.

+0

Ack! Как я понял ... так что нет возможности сохранить значение для последующего использования, тогда, да? –

+0

Вы могли бы, чего вы пытаетесь достичь? Если вы сделаете переменную global и установите ее внутри обратного вызова, вы можете получить к ней доступ позже. –

+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> 

Теперь, как можно было бы ожидать, что сигнал тревоги() срабатывает, как только страница загружена, которая определенно не то, что я хочу; В идеале, я бы хотел, чтобы остальная часть кода дождалась, когда запрос будет обработан, но я сильно сомневаюсь, что это возможно за пределами собственной реализации. Reckon. Мне просто нужно согласиться на разработку моего алгоритма, чтобы подсказка сразу же использовалась?