Проблема с фокусировкой

Я пытаюсь изменить img, если пользователь щелкает где-нибудь внутри указанного элемента div. Ничего не происходит, я знаю, что что-то не так.

Пока у меня есть это

setInterval("myFunction()", 1);

function myFunction() {
 
    if document.getElementById("demo").hasFocus; {
        document.getElementById('pic1').src='https://pbs.twimg.com/profile_images/701853789855346689/iKxIyGkO.png';
    } else {
        document.getElementById('pic1').src='https://pbs.twimg.com/profile_images/688766010837446657/2DgfpAQ6.png';
    }
}
<div style="border-style: solid;height:20px;" id="demo"></div>

<img id="pic1" src="https://pbs.twimg.com/profile_images/688766010837446657/2DgfpAQ6.png">


person L3SAN    schedule 11.11.2016    source источник
comment
это недействительный javascript   -  person Daniel A. White    schedule 11.11.2016
comment
дайте div ширину   -  person skav    schedule 11.11.2016
comment
@ DanielA.White Спасибо, Даниэль, за помощь.   -  person L3SAN    schedule 11.11.2016
comment
Подтвердите свой код, а затем отредактируйте сообщение.   -  person Daniel Springer    schedule 11.11.2016
comment
@skav Это не имеет значения, чувак.   -  person L3SAN    schedule 11.11.2016
comment
@ L3SAN, если вы запустите фрагмент, вы можете четко сказать, что ваш код недействителен, требуется комплексная проверка. stackoverflow.com/help/how-to-ask   -  person Juan Mendes    schedule 11.11.2016
comment
Вы, наверное, хотели вложить изображение в div?   -  person Daniel Springer    schedule 11.11.2016
comment
@JuanMendes Я понимаю, я одновременно учусь.   -  person L3SAN    schedule 11.11.2016
comment
Если ваш вопрос заключался в том, почему я получаю синтаксическую ошибку? Это был бы правильный вопрос, демонстрирующий некоторую должную осмотрительность.   -  person Juan Mendes    schedule 11.11.2016


Ответы (3)


Не уверен, правильно ли я понимаю, что вы пытаетесь сделать. Здесь вы можете увидеть рабочий код:

Вы допустили опечатки в коде и пропустили круглую скобку для условия if

var demo = document.getElementById('demo');
demo.addEventListener('click', myFunction, false);

function myFunction() {

  if (document.getElementById("demo") === document.activeElement) {
    document.getElementById('pic1').src = 'https://pbs.twimg.com/profile_images/701853789855346689/iKxIyGkO.png';
  } else {
    document.getElementById('pic1').src = 'https://screenshots.fr.sftcdn.net/fr/scrn/76000/76818/microsoft-small-basic-22.jpg';
  }
}
<div style="border-style: solid;height:20px;" id="demo"></div>

<img id="pic1" src="https://pbs.twimg.com/profile_images/688766010837446657/2DgfpAQ6.png">

person Lau    schedule 11.11.2016
comment
Вы не упомянули самую важную часть, document.activeElement - person Juan Mendes; 11.11.2016
comment
Вот и все! Я вижу, вы использовали onclick. Спасибо. - person L3SAN; 11.11.2016
comment
Пожалуйста. Вы можете принять мой ответ, если ваша проблема будет решена. Вам также следует прочитать документацию по activeElement, как предложил Хуан Мендес: разработчик. mozilla.org/en-US/docs/Web/API/Document/activeElement - person Lau; 11.11.2016
comment
@Lau Вопрос, первое изображение src, установленное в этом js, не используется? Я знаю, что изначально это то же изображение, что и тег html img. - person L3SAN; 11.11.2016

Пожалуйста, проверьте другую часть. вам не хватает d для документа в ocument.getElementById('pic1').src

person Boopathi D    schedule 11.11.2016
comment
Это двое из них .. - person Daniel Springer; 11.11.2016
comment
@ L3SAN снова вы ошиблись в условии. ; там быть не должно. пожалуйста, отредактируйте это. если document.getElementById (демонстрация) .hasFocus; { - person Boopathi D; 11.11.2016
comment
if (document.getElementById("demo").hasFocus) правильный. - person Boopathi D; 11.11.2016

Условия, оцениваемые для if, должны быть заключены в круглые скобки, и после них не должно быть точки с запятой:

if (document.getElementById("demo").hasFocus)
{ // do something }

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

После того, как вы это исправите, вы говорите, что должен быть обработчик для события щелчка в div. По умолчанию Div не является "фокусируемым", вам нужно установить его свойство tabindex на 1.

Кроме того, если вы хотите реагировать на щелчок, вы должны добавить прослушиватель событий!

someHTMLElement.addEventListener('click', function_to_execute_onclick)

Или вам нужно реагировать на событие щелчка только тогда, когда div сфокусирован?

РЕДАКТИРОВАТЬ: Ну, сначала вам нужна только кнопка!

<img id = "pic">
<button id = 'play'>Play</button>

И JS:

const img = document.getElementById('pic');

function changePicture ()
{ img.src = 'some/pic.jpg'
  // do more stuff on click.
}

document.getElementById('play')
        .addEventListener('click', changePicture);
person Emilio Grisolía    schedule 11.11.2016
comment
Я не знал, что у div нет состояния фокуса. В основном я пытаюсь достичь следующего: у меня есть аудиоплеер в формате mp3, и если пользователь нажимает кнопку «Воспроизвести», обложка альбома будет отображаться где-то еще на странице. - person L3SAN; 11.11.2016
comment
Их можно сфокусировать, если вы установите для свойства tabindex значение 1 :) Затем вам нужно добавить событие щелчка на кнопку! Отредактирую свой ответ. - person Emilio Grisolía; 11.11.2016
comment
Вот что странно: я использую Adobe Muse для его создания. Добавил виджет mp3. Теперь, когда я открываю html-файл, я вижу идентификатор этого аудио-виджета, но это все. ничего больше. Теперь, когда я щелкаю правой кнопкой мыши на странице, на которой он опубликован, и выбираю элемент проверки, я перехожу к этому идентификатору и вижу гораздо больше элементов, таких как фактический тег кнопки, странно, правда? - person L3SAN; 11.11.2016
comment
Я не использовал Adobe Muse, но если у вас недостаточно опыта для написания собственного html, вам не следует его использовать. Кроме того, я не знаю, какой дополнительный код может добавить его в разметку Интернета. Будьте проще, сделайте свою собственную простую страницу. - person Emilio Grisolía; 11.11.2016
comment
вы можете увидеть это здесь: lesantest.comuf.com/sunshine%20Productions/player.html теперь, если вы просмотрите код, вы заметите ‹button›, когда я редактирую код из файла .html, я не вижу этих тегов. - person L3SAN; 11.11.2016
comment
Какие теги вы не видите? - person Emilio Grisolía; 11.11.2016
comment
все это: i.imgur.com/KEPORic.png эта часть кода не появляются вообще в блокноте ++ - person L3SAN; 11.11.2016