0

我有一个 php 变量:

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

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

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

问题是:

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

php 不工作。现在我读了一些关于 ajax 请求的东西。但我不知道它是什么或如何使用它。所以我希望这里有人可以帮助我。

4

2 回答 2

3

首先,除了 PHP 变量之外,您还有一百万零一个问题。首先,您真的不应该再使用该onmouseover属性了。看看JavaScript 和事件 - 最佳实践

所以为了用更好的代码复制你的问题,你会做这样的事情。

<!-- This should be in an external JS file -->
<script>
    // 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);
        });
    }

</script>

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

变量应该使用'var'分配


您的下一个问题是您的分配myTimer没有var. 现在,这里不太可能导致问题,最好记住这一点。

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

函数字符串


我不知道您要做什么,但是您将字符串而不是函数传递给setTimeout. 让我们解决这个问题。

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

解决问题


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

$imagename可能是一个字符串,您在 javascript 中没有考虑到该字符串。让我们解决这个问题。

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

把它们放在一起


<!-- This should be in an external JS file -->
<script>

    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);
        });
    };
</script>

<!-- Not an actual element, used for example purposes only -->
<element id="element"></element>
于 2012-10-02T15:29:23.850 回答
1

在 Javascript 代码中嵌入 PHP 值是最安全的json_encode(),并且由于您在 HTML 属性中输出,因此最好也将其放入htmlspecialchars(); 此外,不鼓励将字符串传递给setTimeout,因此您应该在那里传递一个匿名函数:

onmouseover="myTimer=setTimeout(function() { imageswitcher(<?php echo htmlspecialchars(json_encode($imagename));?>) }, 2000);"
于 2012-10-02T15:16:14.247 回答