setTimeout window.open не может принять this.href

0

Я пытаюсь открыть 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()
}
Теги:

4 ответа

1

(ОК, сначала вы должны указать 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>
1

Вы можете получить URL-адрес от элемента, который вызвал событие mouseover с помощью event.target или event.srcElement для более старых браузеров IE.

http://jsfiddle.net/b42pr/1

HTML

<a href="theURL" onmouseover="popURL()">Hover</a>

JavaScript

function popURL() {
    var url = event.target.href || event.srcElement.href;
    console.log("Open URL: " + url);
    setTimeout(function(){
        window.open(url);
    }, 3000)
}
  • 0
    Звучит как офигенно с трубочкой и прочим :) попробую, и я вернусь к вам, если это сработает ..
0

Попробуйте указать href вне строки:

<a href="../cc2b/myrec.html" onMouseOver="Popup = setTimeout('openwindow(' + window.location.href + ')',3000);" onMouseOut="clearInterval(Popup)">My Rec</a>
  • 0
    Я попробовал это и ничего не всплывает на всех.
  • 0
    Извините, как говорит Doorknob, это должно быть window.location.href
0

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)
}

Однако будьте осторожны, большинство блокировщиков всплывающих окон блокируют это окно.

  • 0
    Я думаю, что OP пытается взять URL из ссылки, а не текущий URL страницы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню