我正在动态生成一个列表。我想让每一行都悬停在鼠标悬停上并可点击链接。我希望链接传递行内容的id。
基本上:
foreach ($courses as $cid=>cinfo){
$univ = $cinfo['univ'];
$desc = $cinfo['desc'];
$size = $cinfo['size'];
$start = $cinfo['start'];
print "<div class='rc_desc' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
"<span>Number of students</span>: $size<br/>".
"<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".
}
<script>
$(function ()
{
$('#rc_desc$cid').hover(function ()
{
$(this).toggleClass('.tr');
});
$('#rc_desc$cid').click(function ()
{
$(location).attr('href','student.php?$cid');
});
});
</script>
问题出在js / jquery中。我希望能够获取$ cid并在点击后将其传递给student.php页面。上面的PHP代码有效,但js当然不会。我知道客户端和服务器端语言的基础。这个问题不值得讲课。我知道我不能完全这样做,但这是我最终想要发生的事情。我对如何实现这一点的想法很简单?提前谢谢我的朋友们!
答案 0 :(得分:9)
是的,如果您在PHP代码中包含<script>
部分,则可以执行类似以下操作:
<script>
var foo = <?php echo $foo; ?>;
</script>
在您的情况下,您将查看以下代码结构:
<script>
$(function () {
$('#rc_desc<?php echo $cid ?>').hover(function () {
$(this).toggleClass('.tr');
});
$('#rc_desc<?php echo $cid ?>').click(function () {
$(location).attr('href', 'student.php?<?php echo $cid ?>');
});
});
</script>
这是可能的原因是因为尽管Javascript在客户端运行,但它在服务器端首先在页面上呈现之前进行处理。因此,它会将$cid
的所有必要实例替换为您包含的实例。
享受并祝你好运!
修改强>:
<script>
$(function () {
$('.rc_desc').hover(function () {
$(this).toggleClass('.tr ');
});
$('.rc_desc').click(function () {
$(location).attr('href', 'student.php?' + $(this).attr('id').split('rc_desc')[1]);
});
});
</script>
答案 1 :(得分:5)
你可以这样做:
$(location).attr('href','<?php echo $cid ?>');
javascript代码不知道它来自php,它显示为常量(文字)。
答案 2 :(得分:2)
是的,这是可能的。您所要做的就是将<?PHP echo $cid; ?>
放在您需要的地方
<script>
$(function ()
{
$('#rc_desc<?PHP echo $cid; ?>').hover(function ()
{
$(this).toggleClass('.tr');
});
$('#rc_desc$cid').click(function ()
{
$(location).attr('href','student.php?<?PHP echo $cid; ?>');
});
});
这是可能的,因为在将脚放入页面时,cid已经被服务器上的字符串替换。由于PHP是服务器驱动的,在它回吐html /脚本之前就像你自己把它放在一起。
答案 3 :(得分:1)
几乎没有办法真正传达PHP和JavaScript。但是,最好和最简单的方法是在属性中设置ID。新的HTML5数据属性将是完美的。
例如,使用带
的锚标记<span data-id="22">some event</a>
然后:
$(this).attr('href','student.php?'+$(this).attr('data-id'));
或者只是使用
<?php echo $id; ?>
如果不是外部JS文件
答案 4 :(得分:1)
我认为你阻止应该是:
<script>
$(function ()
{
<?php foreach($courses as $cid=>cinfo) : ?>
$('#rc_desc<?php echo $cid; ?>').hover(function ()
{
$(this).toggleClass('.tr');
});
$('#rc_desc<?php echo $cid; ?>').click(function ()
{
$(location).attr('href','student.php?<?php echo $cid; ?>');
});
";?>
<?php endforeach; ?>
});
</script>
更新
但你真的不需要这样做,你有
"<div class='rc_desc' data-id='$cid' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
"<span>Number of students</span>: $size<br/>".
"<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".
你可以试试这个
$(function (){
$('.rc_desc').hover(function ()
{
$(this).toggleClass('.tr');
});
$('.rc_desc').click(function ()
{
attrId = $(this).attr("data-id");
$(location).attr('href','student.php?'+id);
});
});
答案 5 :(得分:1)
试试此代码
foreach ($courses as $cid=>cinfo){
$univ = $cinfo['univ'];
$desc = $cinfo['desc'];
$size = $cinfo['size'];
$start = $cinfo['start'];
print "<div class='rc_desc' data-id='$cid' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
"<span>Number of students</span>: $size<br/>".
"<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".
}
<script>
$(function ()
{
$('#rc_desc$cid').hover(function ()
{
$(this).toggleClass('.tr');
});
$('.rc_desc').click(function ()
{
$(location).attr('href','student.php?' + $(this).attr("data-id"));
// if you want to redirect the page do this
// window.location.href = 'student.php?' + $(this).attr("data-id");
});
});
</script>