2013-04-20 240 views
0
<script> 

    $(document).ready(function() { 
    $(".tweets").liveTweets({operator: "#google"}); 
      }); 
</script> 

我喜欢将#google作为变量,以便我可以根据需要更改股票代码。我试图用php回声。但是,它打破了现场推特jQuery。将字符串传递给jquery函数

谢谢!

+0

想要将''google''作为变量传递给'liveTweets()'对象吗?或者您想使用PHP将变量回显到'liveTweets()'对象中?你想做这个服务器端还是客户端? – 2013-04-20 22:49:49

回答

1
<?php 
    $operator = "#google"; 
?> 

<script> 

    $(document).ready(function() { 
    $(".tweets").liveTweets({operator: <?php echo json_encode($operator)?>}); 
      }); 
</script> 

编辑:谢谢你的comment @icktoofay。

他是对的,我们并不需要用双引号来包装输出,它确实为我们。我刚刚更新了它。

+0

不要使用服务器端代码构建JavaScript。这是一个糟糕的设计决定。 – zzzzBov 2013-04-20 23:00:42

+0

当然这是不好的做法。但是,如果OP在页面加载时试图从服务器端传递变量,那么这是做到这一点的方法之一。让我们知道你的是什么? – ocanal 2013-04-20 23:06:37

+0

[当然](http://stackoverflow.com/a/16126159/497418) – zzzzBov 2013-04-20 23:09:57

0

HTML属于.html文件,CSS属于.css文件,JS属于.js文件。如果你想从服务器(这里是PHP)传递额外的数据到JavaScript,你应该使用[data-*] attributes

无论你定义你的.tweets元素,你应该通过你想用于operator为自定义data-*属性的值:

HTML:
<?php 
    $operator = '#google'; 
?> 
<div class="tweets" data-operator="<?php echo htmlspecialchars($operator) ?>"> 
    ...contents... 
</div> 

在你单独的JS文件,你可以然后在初始化控件时使用自定义服务器变量:

JS:
$('.tweets').each(function() { 
    $(this).liveTweets({ 
     operator: $(this).data('operator') 
    }); 
}); 

或者,你可以使用data-*属性包含整个JSON对象初始化窗口小部件:

HTML:
<?php 
    $liveTweets = array(
     'operator' => '#google' 
    ); 
?> 
<div class="tweets" data-live-tweets="<?php echo htmlspecialchars(json_encode($liveTweets)) ?>"> 
    ...contents... 
</div> 
JS:
$('.tweets').each(function() { 
    $(this).liveTweets($(this).data('liveTweets')); 
}); 

此外,您可以选择基于具有相应data-*属性的条件的元素:

JS:
$('[data-live-tweets]').each(function() { 
    $(this).liveTweets($(this).data('liveTweets')); 
});