Window.open с проверкой того же содержимого div

Я хочу создать всплывающее окно со следующим:

  • Открывать всплывающее окно, когда пользователь нажимает на div 1, показывая содержимое div 1.
  • Если содержимое div 1 уже существует во всплывающем окне, и пользователь нажимает на div 1, ничего не делать
  • Когда пользователь щелкает div 2, очищается всплывающее окно и отображается содержимое div 2.

Я пробовал следующее, но условный оператор всегда верен, потому что новое всплывающее окно всегда содержит содержимое выбранного элемента div.

Не могли бы вы дать предложения

Чистый javascript предпочтительнее

HTML:

<div class = "s1" onclick = "basicPopup('',this);">Div 1</div>
<div class = "s1" onclick = "basicPopup('',this);">Div 2</div>

JS:

function basicPopup(url,t1) {
  popupWindow = window.open(url,'popUpWindow','height=500,width=500,left=100,top=100, resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes'); 
  popupWindow.document.body.innerHTML = t1.innerHTML;
  return false; //make sure parent window doesn't refresh

  if (popupWindow.document.body.innerHTML==t1.innerHTML){
    return false; //if equal do nothing
  }

  else {
    popupWindow.document.body.innerHTML='';
    popupWindow.document.write(t1.innerHTML);
  }

}

у вас есть возврат false перед IF. После возврата ничего не происходит.

Nawed Khan 27.10.2018 00:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
121
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Удалите return false перед оператором if. Возврат немедленно завершает функцию, и любой код после нее не будет запущен.

JSFiddle: http://jsfiddle.net/mu6751xk/

function basicPopup(url,t1) {
  popupWindow = window.open(url,'popUpWindow','height=500,width=500,left=100,top=100, resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes'); 
  popupWindow.document.body.innerHTML = t1.innerHTML;
}

Thanks. But when I say "do nothing" if div 1 content exists in the popup, I mean that div 1 should not be clickable, so multiple clicks on div 1 should fail. (ie popup window shouldn't refresh, parent window would cover popup window)

Вы должны выполнить проверку, прежде чем пытаться открыть всплывающее окно.

JSFiddle: http://jsfiddle.net/xrsw4Lou/

Спасибо. Но когда я говорю «ничего не делать», если во всплывающем окне есть содержимое div 1, я имею в виду, что на div 1 нельзя нажимать, поэтому несколько щелчков по div 1 должны завершиться ошибкой. (т.е. всплывающее окно не должно обновляться, родительское окно будет закрывать всплывающее окно)

A A 27.10.2018 01:47

@AA Я добавил решение для этого.

Unmitigated 27.10.2018 02:50

Помимо return false, вы также сначала присваиваете значение div окну, а затем проверяете, что, конечно, всегда будет возвращать true.

function basicPopup(url,t1) {
  popupWindow = window.open(url,'popUpWindow','height=500,width=500,left=100,top=100, resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes'); 

  if (popupWindow.document.body.innerHTML==t1.innerHTML){
    return false; //if equal do nothing
  }
  else {
    popupWindow.document.body.innerHTML='';
    popupWindow.document.write(t1.innerHTML);
  }
}

Я удалил оба:

popupWindow.document.body.innerHTML = t1.innerHTML;
return false; //make sure parent window doesn't refresh

ОБНОВИТЬ: На самом деле мы здесь слишком много думаем. Кажется, что простое присвоение нового значения делает то же самое, за исключением того, что оно каждый раз заполняет контент:

function basicPopup(url,t1) {
  popupWindow = window.open(url,'popUpWindow','height=500,width=500,left=100,top=100, resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes'); 
  popupWindow.document.body.innerHTML = t1.innerHTML;    
}

Мне известен последний блок кода, который вы написали, но он всегда загружает всплывающее окно без проверки содержимого. Я хочу явно сделать так, чтобы, если содержимое всплывающего окна равно содержимому, по которому щелкнули, ничего не делать (т. Е. Div будет неактивным, всплывающее окно упадет ниже родительского окна)

A A 27.10.2018 01:41

Именно это и делает первый блок кода. Назначьте ТОЛЬКО, если он еще не назначен. То, что вы делали, было сначала слепым назначением, а затем проверкой назначенных данных с назначенными данными, что всегда было правдой. Откажитесь от второго блока (обновленного) и попробуйте первый блок моего кода.

Nawed Khan 28.10.2018 06:44

Другие вопросы по теме