Только для получения значения строки версии ОС:
[[UIDevice currentDevice] systemVersion]
jConfirm('are you sure?', 'Confirmation Dialog',
function(r) {
result = r;
response = true;
return r;
}
);
if (response == true) {
Это предает неверное толкование последовательности событий, которая происходит с помощью асинхронного кода. Просто, потому что Вы записали, что это встраивает, не означает, что это собирается выполниться строго от начала до конца.
Вы записали "//, ожидают ответа" как альтернатива, но нет никакого кода JavaScript, можно записать, что это на самом деле сделает это. Ваша функция должна возвратиться для давания контроля назад к браузеру, прежде чем браузер сможет запустить события щелчка в jConfirm UI, которые заставляют обработку продолжиться.
Способы заставить асинхронный код работать в синхронном контексте (и наоборот) существуют - в особенности распараллеливает и сопрограммы (и их ограниченные генераторы отношения). Но JavaScript не имеет ни одной из этих функций, таким образом, необходимо записать код для установки синхронной-или-асинхронной модели библиотека использует.
Вы только что поразили большое ограничение в JavaScript. Как только Ваш код вводит асинхронный мир, нет никакого способа возвратиться к классическому процедурному потоку выполнения.
В Вашем примере, решение состояло бы в том, чтобы сделать цикл, ожидающий ответа, чтобы быть заполненным. Проблема состоит в том, что JavaScript не предоставляет инструкции, которая позволит Вам циклично выполняться неограниченно долго, не беря 100% вычислительной мощности. Таким образом, Вы закончите тем, что блокировали браузер, иногда к точке, где Ваш пользователь не будет в состоянии ответить на фактический вопрос.
единственное решение здесь состоит в том, чтобы придерживаться асинхронной модели и сохранить ее. Мой совет состоит в том, что необходимо добавить обратный вызов к любой функции, которая должна сделать некоторую асинхронную работу, так, чтобы вызывающая сторона могла выполнить что-то в конце функции.
function confirm(fnCallback)
{
jConfirm('are you sure?', 'Confirmation Dialog', function(r)
{
// Do something with r
fnCallback && fnCallback(r); // call the callback if provided
});
}
// in the caller
alert('begin');
confirm(function(r)
{
alert(r);
alert('end');
})
Так как обратный вызов является асинхронным (по крайней мере, в том смысле, что он ожидает на пользователе, чтобы сделать что-то), могло бы быть легче обработать то, что Вам нужен к внутренней части обратный вызов:
function confirm() {
jConfirm('are you sure?', 'Confirmation Dialog', function(r) {
if (r) doSomething();
});
}
<час> @klogan [комментарии]
я предполагаю, что Вы получили их от здесь ?
страница дает Вам Ваш ответ: (посмотрите под [1 120] Использование )
<час>Эти методы не возвращают те же значения, как подтверждают () и подсказка (). Необходимо получить доступ к получающимся значениям с помощью функции обратного вызова. (Дополнительную информацию см. в демонстрации.)
@klogan
мнение, которое я пытаюсь высказать, - то, что нет действительно простого способа выполнить то, что Вы хотите. Вы пытаетесь коррелировать процедурный и событийно-ориентированный программирование - что-то, что JavaScript не помогает Вам сделать.
<забастовка> самое простое (хотя, опасный ) решение состоит в том, чтобы использовать псевдобесконечный цикл. Но, если callback
никогда не называется, у Вас теперь есть фактический бесконечный цикл. И, в зависимости от механизма JavaScript, Вы могли бы уничтожить ожидание браузера. забастовка>
Точка: Ваш лучший выбор состоит в том, чтобы избежать <забастовка> это забастовка> попытка вызвать событийно-ориентированный в процедурный.
function confirm() {
var result = false;
var response = false;
jConfirm('are you sure?', 'Confirmation Dialog',
function(r) {
result = r;
response = true;
});
while(!response) continue; // wait
return result;
}
Технически, да , но я не сделал бы этого на веб-сайте.
Смотрят на рассказ JavaScript , который базируется прочь Narcissus.
Рассказ JavaScript является маленьким расширением языка сценариев JavaScript, который включает запирающие способности для асинхронных обратных вызовов события. Это делает асинхронный код освежающе читаемым и понятным.
Селен использование эта технология.
<час>Выезд Скрутки JavaScript :
Скрутки JavaScript добавляет сопрограмму и совместную поддержку поточной обработки языку сценариев JavaScript для включения запирающих способностей для асинхронных обратных вызовов события. Это делает код, который использует асинхронную операцию, намного более линейную, читаемую, и управляемую. Скрутки создаются на Рассказе JavaScript, записанный Neil Mix и большой частью Рассказа, которым JavaScript остался в Скрутках включая большую часть этой документации.
В JavaScript Ваш код не может просто ожидать, пока событие не стреляло - событие должно всегда обрабатываться отдельным, асинхронным обработчиком событий. Иногда это прекрасно, но это часто вызывает то, что должно быть простой последовательностью операторов в непростые искривления. Это также повреждает способность инкапсулировать функциональность, потому что вызывание функций должно знать для обеспечения обработчика обратного вызова. Скрутки обеспечивают способность приостановить и возобновить потоки выполнения. Выполнение может приостановить резюме, когда событие закончено. Это позволяет Вам писать трудно к чтению асинхронную обработку событий в простом, линейном, читаемом коде, который инкапсулирует реализацию.
Я предположил бы, что необходимо будет захватить ответ как это. Я не думаю, что Вам нужен обратный вызов.
function confirm() {
var response = jConfirm('are you sure?', 'Confirmation Dialog');
if (response) {
alert(result);
}
else {
//wait for response
alert('hi');
}
}
Я думаю, что предложил возможное решение этой проблемы. Я читал эту статью: http://treasure4developer.wordpress.com/2008/06/23/calling-postback-event-from-javascript/
В основном идея состоит в том, что Вы вынуждаете обратную передачу покинуть JavaScript, сначала я нашел, что обратная передача будет работать, но не назвала бы мое событие кнопки, но после чтения статьи, я нашел, что мог обнаружить, если бы это была обратная передача JavaScript, и просто назовите метод, чтобы сделать обработку
DotnetShadow
Отношений