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 変数の問題以外にも、100 万と 1 つの問題があります。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」を使用して割り当てる必要があります


あなたの次の問題は、あなたの代入myTimervar. ここで問題が発生する可能性は低いので、覚えておくとよいでしょう。

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

PHP値をJavascriptコードに埋め込むには、が最も安全json_encode()です。HTML属性で出力しているので、htmlspecialchars();も使用することをお勧めします。また、文字列をに渡すことsetTimeoutはお勧めできません。そのため、代わりに無名関数を渡す必要があります。

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