JS-код перестал выполняться при открытии диалогового окна файла - PullRequest
1 голос
/ 09 февраля 2012

Когда я пытаюсь открыть диалоговое окно файла (тип ввода = файл), мой код JS перестает выполняться в IE. Не могли бы вы объяснить мне, почему это произошло? И как я могу это исправить?

JS:

    function Count() { 
    num++;
    document.timerform.clock.value = num;
    down = setTimeout("Count()", 1000);
    }
    function timeIt() {
    num=0;
    Count();
    }

HTML:

    <BODY OnLoad="timeIt()">
    <center>   
    <form name="timerform">
    <input type="text" name="clock" size="7" value="1:00"><p>
    <input type="file" name="datafile" size="40">
    </form>
    </center>

версия с iframe:

    <BODY OnLoad="timeIt()">
    <center>
    <form name="timerform">
    <input type="text" name="clock" size="7" value="1:00"><p>
    <iframe src="blank.html" height="200" width="500">My frame.</iframe>
    </form>
    </center>

blank.html:

    <input type="file" name="datafile" size="40">

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Такова природа браузера. Вы ничего не можете с этим поделать. (кроме помещения диалогового окна файла в Iframe)

0 голосов
/ 09 февраля 2012

Javascript является однопоточным.Если вы хотите, чтобы второй счетчик использовал setTimeout и не выходил из строя из-за JavaScript, я предлагаю вам использовать объект Date.Сделайте следующее:

var startTime = 0;
function Count() { 
    document.timerform.clock.value = Math.round((new Date().getTime() - startTime)/1000);
    down = setTimeout(Count, 1000);
}
function timeIt() {
    startTime = new Date().getTime();
    Count();
}

Тогда, даже если у вас есть событие, которое берет на себя управление потоком javascript, вы не будете сбрасывать счет, как только счет возобновится.Вы по-прежнему хотите избегать таких ситуаций, но никогда не рассчитывайте, что setTimeout будет точным временем, которое вы установили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...