2011-02-27 3 views
0

Как написать «присваивать переменную, если происходит действие». Я пишу следующее, но он всегда возвращает 1. СпасибоКак назначить переменную, если

function openwindow(){ 
testWindow = window.open("popup.php"); 
setTimeout(function() { testWindow.close(); },1000); 
if(testWindow !== null){ 
    var t = 1; 
    return t; 
} 
} 
+0

Что такое «действие», которое должно произойти? –

ответ

0

Попробуйте это:

if(testWindow != null){ 

К сожалению, не так. Что делаешь? Конечно, он всегда возвращается 1. Но чего вы хотите достичь? setTimeout будет «установлен», а затем сразу же будет запущена следующая строка исходного кода, так что вы ожидаете?

0

Что вы хотите сделать? Вы проверяете открытую функцию, браузер каждый раз открывает окно, поэтому возвращает «1» в порядке, не так ли?

NB: Лучший способ, чтобы написать ваше состояние:

if (testWindow != null) { 
    return 1; 
} else { 
    return 0; 
} 

или проще:

return (testWindow != null) ? 1 : 0; 
0

Предполагая, что вы хотите, глобальная переменная t быть 1, а окно открыто и 0, когда она закрыта через одну секунду, здесь лучше код:

var t = 0; 
var testWindow = 0; 
function openwindow() { 
    t = 1; 
    testWindow = window.open("popup.php"); 
    window.setTimeout(function() { testWindow.close(); t = 0; }, 1000); 
} 
0

testWindow переменная является объектом и не будет != null, когда окно закрыто. Вместо этого вы должны использовать свойство testWindow.closed. Однако, как указывали @Tim и @Shadow Wizard, тайм-аут будет срабатывать после выполнения вашего кода.

В зависимости от того, что вы хотите сделать - вы можете проверить состояние окна следующим образом:

var testWindow;// declared here so we can access it from outside the function. 

function openwindow() { 
    testWindow = window.open("popup.php"); 
    window.setTimeout(function() { testWindow.close(); }, 1000); 
} 

if (!testWindow) { 
    alert('testWindow hasnt been created by openwindow yet'); 
} 

if (testWindow && !testWindow.closed) { 
    alert('testWindow is open'); 
} 

if (testWindow && testWindow.closed) { 
    alert('testWindow is closed'); 
} 

Это также будет работать, если пользователь закрывает окно, прежде чем делать.

ОБНОВЛЕНО:

Просто чтобы прояснить - и прости меня, если вы это уже.

Что SetTimeout делает, говорит:

«выполнить эту заданную функцию в секунду, а тем временем продолжать выполнение остальной части этого кода».

Таким образом, ваша функция завершит выполнение так, как будто setTimeout не существует. Позже (через 1 секунду) срабатывает функция в setTimeout.

Надеюсь, это полезно.

+0

Читайте о window.closed: https://developer.mozilla.org/en/DOM/window.closed – johnhunter

Смежные вопросы