关于javascript:在html标记的鼠标悬停中的setTimeOut函数中使用php变量

Using a php variable in a setTimeOut function in a mouseover in an html tag

我有一个php变量:

1
2
3
<?php
$imagename = $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile());
?>

这是在循环中创建的。 此循环显示一些图像。

当我将鼠标悬停在图像上时,会触发onmouseover。 一切顺利。

问题是:

1
onmouseover="myTimer=setTimeout('imageswitcher(<?php echo $imagename;?>)', 2000);"

PHP不起作用。 现在,我阅读了一些有关ajax请求的信息。 但是我不知道它是什么或如何使用。 所以我希望这里有人可以帮助我。


首先,除了PHP变量之外,这里还有一百万个问题。首先,您实际上不应该再使用onmouseover属性。看看JavaScript和事件-最佳做法

因此,要使用更好的代码来复制您的问题,您可以执行以下操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- This should be in an external JS file -->

    // IE Event Listener"Polyfill"
    var addEvent = function(element, event, callback) {
        if (document.addEventListener) {
            element.addEventListener(event, callback);
        } else {
            element.attachEvent('on' + event, callback);
        }
    };

    addEvent(document, 'load', function() {
        var element = document.getElementById('element');

        attachEvent(element, 'onmouseover', function() {
            myTimer = setTimeout('imageswitcher(<?php echo $imagename; ?>)', 2000);
        });
    }



<!-- Not an actual element, used for example purposes only -->
<element id="element"></element>

变量应使用'var'分配

下一个问题是分配myTimer而没有var的情况。现在,这不太可能引起此问题,因此请牢记这一点。

1
var myTimer = setTimeout('imageswitcher(<?php echo $imagename; ?>)', 2000);

函数字符串

我不知道您要做什么,但是您正在向setTimeout传递字符串而不是函数。让我们修复它。

1
2
3
var myTimer = setTimeout(function() {
    imageswitcher(<?php echo $imagename; ?>);
}, 2000);

解决问题

现在,让我们在这里解决实际问题。

$imagename可能是字符串,您没有在javascript中说明。让我们修复它。

1
imageswitcher('<?php echo $imagename; ?>');

放在一起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- This should be in an external JS file -->


    var addEvent = function(element, event, callback) {
        if (document.addEventListener) {
            element.addEventListener(event, callback);
        } else {
            element.attachEvent('on' + event, callback);
        }
    };

    addEvent(document, 'load', function() {
        var element = document.getElementById('element');

        attachEvent(element, 'onmouseover', function() {
            var myTimer = setTimeout(function() {
                imageswitcher('<?php echo $imagename; ?>');
            }, 2000);
        });
    };


<!-- Not an actual element, used for example purposes only -->
<element id="element"></element>


json_encode()最安全地完成将PHP值嵌入Javascript代码中的操作,并且由于要输出HTML属性,因此最好也将它放在htmlspecialchars()中。同样,不建议将字符串传递给setTimeout,因此您应该在此处传递匿名函数:

1
onmouseover="myTimer=setTimeout(function() { imageswitcher(<?php echo htmlspecialchars(json_encode($imagename));?>) }, 2000);"