2016-06-04 2 views
0

При изменении размера Я хочу, чтобы код запускал первый оператор if: «Я думаю, что это слишком мало». Во втором изменении размера я хочу, чтобы он запускал первый вариант: «Я думаю, что это слишком большой». Он работает только один, это потому, что переменная настройка является локальной только и не придерживается во второй раз?Проблема с этим Javascript кодом (я думаю, с контекстом выполнения)

var counter = 0; 
 
function message() { 
 
    if (counter == 0) { 
 
     document.write("I think this is too small"); 
 
     counter = counter + 1; 
 
    } else if (counter == 1) { 
 
     document.write("I think this is too big"); 
 
     counter = counter + 1; 
 
    } else { 
 
     confirm("Third Time's a charm"); 
 
    } 
 
} 
 
window.addEventListener('resize', message, false); 
 
<p>Text</p>

+0

Я не уверен, что это связано с контекстами? Что вы даже называете этим термином? – Bergi

+1

Возможный дубликат [Почему document.write считается «плохой практикой»?] (Http://stackoverflow.com/q/802854/1048572) – Bergi

ответ

1

Проблема заключается в том document.write. Никогда не использовать document.write. Вы можете подумать: «О, я хочу что-то написать в документе, поэтому document.write кажется идеальным». Неправильно, вас обманули его имя. Even the specification says it's horrendous.

Если вы хотите что-то написать, используйте textContent, innerHTML или DOM-методы.

var target = document.querySelector('p'); 
 
var counter = 0; 
 
function message() { 
 
    if (counter == 0) { 
 
    target.textContent = "I think this is too small"; 
 
    counter = counter + 1; 
 
    } else if (counter == 1) { 
 
    target.textContent = "I think this is too big"; 
 
    counter = counter + 1; 
 
    } else { 
 
    target.textContent = "Third Time's a charm"; 
 
    } 
 
} 
 
window.addEventListener('resize', message, false);
<p>Text</p>

-1

Как уже упоминалось выше document.write() вызывает проблемы .Если вы проверить ссылку, предоставленную ему вы поймете, в чем проблема и неоднозначность его causes.So, не используйте его. Но если вы хотите его использовать, вы можете использовать его так (по крайней мере, в данном конкретном случае здесь).

  var counter = 0; 
 
     function message() { 
 
      if (counter == 0) { 
 
       document.write("I think this is too small"); 
 
       counter = counter + 1; 
 
       window.addEventListener('resize', message, false); 
 
      } else if (counter == 1) { 
 
       document.write("I think this is too big"); 
 
       counter = counter + 1; 
 
       window.addEventListener('resize', message, false); 
 
      } else { 
 
       confirm("Third Time's a charm"); 
 
       window.addEventListener('resize', message, false); 
 
      } 
 
     } 
 
     window.addEventListener('resize', message, false); 
 
<p>Text</p>

+0

«Вы можете использовать его вот так *" - что вы изменили? Почему он работает сейчас? – Bergi

+0

@Bergi Я запустил код и проверил, что значения счетчика меняются, но событие не запускает функцию. Мне показалось, что метод addEventListener удалялся из объекта window после выполнения document.write(). почему я добавил его снова после document.write(), чтобы метод addEventListener снова вызывался, чтобы поймать дальнейшие события. Хотя он не может гарантировать, что он всегда будет работать в каждом случае, но, похоже, работает здесь. –

+0

О, почему я остановился. Я просто попытался ответить на вопрос. Я думал, что это может не помочь, если на плакате вопроса появится кто-то еще, кто может действительно объяснить, почему этот код работал. Если его несоответствие и downvoted, я должен просто удалить его. Действительно, не знаю много о системе. –

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