Могут Вы для остановки выполнения JavaScript, не запирая браузер? Путем Вы обычно останавливались бы, выполнение должно сделать большое количество while()
- цикл, но в случае FireFox, это запирает браузер, пока цикл не закончился.
Каково Ваше взятие на этом?
Я пытаюсь переопределить window.confirm()
реализовать мое собственное диалоговое окно с помощью HTML. Я делаю это так, я не должен изменять существующий код (это - довольно большая кодовая база).
Я должен смочь остановить выполнение для разрешения ввода данных пользователем; чтобы в свою очередь возвратить булевскую переменную как стандарт подтверждают, что функция делает:
if (confirm("..."))
{
// user pressed "OK"
}
else
{
// user pressed "Cancel"
}
Обновление
К моему знанию; это не может быть сделано с помощью setTimeout()
или setInterval()
так как эти функции выполняют код, который это дано им асинхронно.
Подтверждение ()
Подсказка ()
и Alert ()
Функции - они вызывают из песочной коробки JavaScript в браузере, и браузер приостанавливает выполнение JavaScript. Вы не можете сделать то же самое, так как вам нужно создать свою функциональность в JavaScript.
Я не думаю, что есть отличный способ упасть в замену, не делая реструктуризацию по линиям:
myconfirmfunction(function() {
/* OK callback */
}, function() {
/* cancel callback */
});
Либо используйте обратные вызовы или сделать только ваш код Firefox только. В Firefox с поддержкой JavaScript 1.7 и выше вы можете использовать оператор текучести для моделирования желаемого эффекта. Я создал библиотеку для этой цели ASYNC.JS . Стандартная библиотека для Async.js включает в себя метод подтверждения, который можно использовать как таковые:
if (yield to.confirm("...")) {
// user pressed OK
} else {
// user pressed Cancel
}
Вы не можете остановить резьбу события в JavaScript, поэтому вместо этого вам нужно работать по всей проблеме, обычно с помощью функций обратного вызова. Это функции, которые запускаются позже, но могут быть переданы как любой другой объект в JavaScript. Вы можете быть знакомы с ними из программирования AJAX. Так, например:
doSomeThing();
var result = confirm("some importart question");
doSomeThingElse(result);
будет преобразован в:
doSomeThing();
customConfirm("some importart question", function(result){
doSomeThingElse(result);
});
, где CustomCondFirm
теперь занимает вопрос и передает результат к функции, который требуется в качестве аргумента. Если вы реализуете диалоговое окно DOM с помощью кнопки, затем подключите слушатель события к кнопкам OK и отменить и вызовите функцию обратного вызова, когда пользователь нажимает на один из них.
Вы также можете попробовать Dreamweaver, если он у вас есть. Он обрабатывает Classic ASP и даже обеспечивает некоторое заполнение кода.
-121--3554037-Эти вопросы невозможно ответить без дополнительных разъяснений. Вопрос помечен как C++, что означает, что язык предположительно является C++.
В этом случае, если объявления сделаны в области пространства имен, объявление ix
недействительно. Использование безымянного типа класса (не имеющего связи) для объявления объекта с внешней связью недопустимо. Объявление ix
будет работать в локальной области
void foo() {
struct { int x; } ix; // OK, no linkage
}
Также может сработать, если ix
будет объявлено с внутренней связью в области пространства имен
static struct { int x; } ix; // OK? Internal linkage?
, хотя я лично считаю, что это также было задумано как плохо сформированное (Comeau так или иначе это позволяет).
Но объявление области пространства имен с внешней связью плохо сформировано
// In namespace scope
struct { int x; } ix; // ERROR
Таким образом, если предполагается область пространства имен и если вышеупомянутые объявления предназначены для того, чтобы быть взятыми как единый фрагмент кода, то на эти вопросы нет значимых ответов. Весь код просто недействителен. Это бессмысленно. Это не C++.
В противном случае, если ix
объявлен без связи (локальной) или с внутренней связью, то ix
является объектом.
Что касается ia
, то это объект независимо от того, где он объявлен, поскольку тип класса имеет имя .
Следует отметить, что понятие объект в C++ не имеет ничего общего с классами. Объект в C++ - область места хранения (памяти). Переменная типа int
является объектом в C++, например.
Добавлено позже: Бит о законности ix
объявления является интересным вопросом. Видимо, C++ 98 допускал такие декларации, которые предлагалось объявить вне закона в DR # 132 . Однако позже предложение было отклонено (по довольно странной причине) и вещи остались как есть. Однако Comeau Online отказывается принимать объявление объекта с внешней связью с неименованным типом (внутренняя связь в порядке). Это вполне может быть формальная ошибка в компиляторе Comeau (не то, чтобы я жаловался на это).
Добавлено еще позже: О, я вижу, что есть еще более поздний DR # 389 , который окончательно запрещает такие объявления, но статус этого DR все еще CD1.
-121--4196153-Я не думаю, что есть какой-либо способ разумно воссоздать функциональность confirm () или prompt () в вашем собственном JavaScript. Они «особенные» в смысле реализуются как вызовы в собственную библиотеку браузера. В JavaScript невозможно создать модальный диалог такого рода.
Я видел различные библиотеки пользовательского интерфейса, которые моделируют эффект, помещая элемент поверх страницы, который выглядит и действует как модальный диалог, но они реализованы с использованием асинхронных обратных вызовов.
Необходимо изменить существующую библиотеку, а не заменить файл window.confirm.
То, как вы обычно остановите выполнение, вряд ли когда-либо станут бесконечным.
Разбивайте свою работу на части, что вы звоните с Settimeout
Измените это:
DoSomeWork();
Wait(1000);
var a = DoSomeMoreWork();
Wait(1000);
DoEvenMoreWork(a);
к этому:
DoSomeWork();
setTimeout(function() {
var a = DoSomeMoreWork();
setTimeout(function() {
DoEvenMoreWork(a);
}, 1000);
}, 1000);
Я пробовал использовать жесткий цикл для этого . Мне нужно было замедлить собственное событие (которое, как AFAIK, является единственным вариантом использования синхронного ожидания, которое нельзя изменить асинхронно). Существует множество примеров циклов, которые утверждают, что не блокируют браузер; но ни один из них у меня не работал (браузер не зависал, но они не позволяли ему делать то, чего я изначально ждал), поэтому я отказался от этой идеи.
Затем я попробовал этот - сохранить и воспроизвести событие, что тоже кажется невозможным в кроссбраузерности. Однако в зависимости от мероприятия и того, насколько гибкими вы должны быть, вы можете приблизиться.
В конце концов я сдался и почувствовал себя намного лучше; Я нашел способ заставить свой код работать, вообще не замедляя собственное событие.