Работа с iframe
Добрый день, друзья!
Есть выпадающий список <select> и iframe ниже этого списка. При клике по элементам <option> списка изменяется атрибут src фрейма. И после этой замены уже не получается работать с самим фреймом (перестают срабатывать события). Как быть в таком случае? думал как-то делегирование событий реализовать, но не удается. |
Что за события? куда навешиваете?
|
При наведении мыши на элементы фрейма, они обрамляются рамкой. При уходе курсора с элемента - рамка исчезает.
Скрипт нормально работает, но когда обновляется src фрейма, перестает работать. С cross-origin проблем нет - работаю только со страницами своего сайта. |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<iframe src="https://masterhost.ru/" frameborder="0"></iframe>
<select>
<option value="https://masterhost.ru/">1</option>
<option value="https://quto.ru/">2</option>
</select>
<script>
var frame = document.querySelector('iframe');
frame.addEventListener('mouseover', e=> e.target.style.border = "10px solid red");
frame.addEventListener('mouseout', e=> e.target.style.border = "0px");
document.querySelector('select').addEventListener('change', e=> frame.src = e.target.value);
</script>
</body>
</html>
|
сделайте минимальный макет
|
Вот примерная реализация на jquery. Все страницы на одном домене
Страница index.html Код:
<!DOCTYPE html>Код:
<!DOCTYPE html>Код:
<!DOCTYPE html> |
gegavat, потому что при обновлении Iframe, нужно заново подключаться к нему.
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<select id="option_page">
<option value="page1.html">page1</option>
<option value="page1.html">page2</option>
</select>
<br><br>
<iframe id="mark_frame" src="page1.html"></iframe>
<script>
$('#option_page').change(function() {
$('#mark_frame').prop("src", this.value);
});
$('#mark_frame').mouseover(function(e) {
if (e.target.children.length == 0) {
$(e.target).css({
border: "1px solid blue",
cursor: "pointer"
});
}
});
$('#mark_frame').mouseout(function(e) {
$(e.target).css({
border: "none"
});
});
</script>
</body>
</html>
|
1) неверный выбор события для селекта
2) src не attr, а prop 3) селектор нужен для самого селекта а не опшина 4) селектора фрейма для рамки более чем достаточно 5) зачем вообще делать рамку JS если с этим отлично справляется CSS 6) для чего эта строчка? e.target.children.length == 0 |
Хм.. у меня сейчас рамка на весь фрейм целиком накладывается, а не на отдельные элементы в нем.
Вообще задача в том, чтобы выделять рамкой элементы во фрейме и затем по клику по этим элементам извлекать их id для последующей обработки. |
| Часовой пояс GMT +3, время: 11:05. |