Я пытаюсь открыть href onMouseOver через 3000 мс. Но в нем просто появляется пустое окно. Что мне не хватает?
HTML:
<a href="../cc2b/myrec.html" onMouseOver="Popup = setTimeout('openwindow(this.href)',3000);" onMouseOut="clearInterval(Popup)">My Rec</a>
JavaScript:
var Popup = null;
function openwindow()
{
var win = window.open()
}
(ОК, сначала вы должны указать URL-адрес в window.open()
, иначе он не знает, на какую страницу открыть. Кроме этого :)
Когда вы выполняете setTimeout()
значение this
сбрасывается в отложенном коде.
Быстрое исправление - немедленно извлечь URL-адрес, а затем передать функцию в setTimeout()
которая может использовать переменную.
<a href="../cc2b/myrec.html"
onMouseOver="var popupUrl = this.href; Popup = setTimeout(function(){openwindow(popupUrl)}), 3000);"
onMouseOut="clearInterval(Popup)">
My Rec
</a>
Тем не менее, более чистым решением было бы свести к минимуму код в onMouseOver
, установив тайм-аут в функции openhoverpopup
:
<a href="../cc2b/myrec.html"
onMouseOver="openhoverpopup(this.href)"
onMouseOut="clearhoverpopup()">
My Rec
</a>
<script>
var popupTimeout = null;
function openhoverpopup(url) {
popupTimeout = setTimeout(function () {
window.open(url);
}, 3000);
}
function clearhoverpopup() {
clearTimeout(popupTimeout);
}
</script>
Вы можете получить URL-адрес от элемента, который вызвал событие mouseover с помощью event.target
или event.srcElement
для более старых браузеров IE.
<a href="theURL" onmouseover="popURL()">Hover</a>
function popURL() {
var url = event.target.href || event.srcElement.href;
console.log("Open URL: " + url);
setTimeout(function(){
window.open(url);
}, 3000)
}
Попробуйте указать href вне строки:
<a href="../cc2b/myrec.html" onMouseOver="Popup = setTimeout('openwindow(' + window.location.href + ')',3000);" onMouseOut="clearInterval(Popup)">My Rec</a>
this.href
undefined, я думаю, что вы ищете window.location.href
:
> this.href
undefined
> window.location.href
"http://stackoverflow.com/questions/18981172/settimeout-window-open-cant-take-this-href"
Кроме того, ваша функция
function openwindow()
{
var win = window.open()
}
Не принимает никаких параметров и ничего не открывает. Измените его на
function openwindow(target)
{
var win = window.open(target)
}
Однако будьте осторожны, большинство блокировщиков всплывающих окон блокируют это окно.