变量未从PHP传递到JavaScript

时间:2018-07-19 05:50:55

标签: javascript php jquery

我有一个加载类别的代码段

<?php
    $filtered = array_filter($categories, function($cat) {
        return $cat['name']; 
    });
    foreach (array_slice($filtered, 0, 5) as $cat) : ?>
        <li class="category">
            <a id="cat_<?php echo $cat['name']?>" href="?tag=<?php echo $cat['name']?>"><?php echo $cat['name']?></a>
        </li>

<?php endforeach ?>

这在JS中

$(document).ready(function(){
    $('#cat_<?php $cat[0]['name'];?>').find('a').trigger('click');      
});

加载类别时,我试图触发对第一个类别的点击。

我得到以下HTML作为输出:

<ul class="navigation">
    <li class="category">
        <a id="cat_cars" href="?tag=cars">Cars</a>
    </li>                           
    <li class="category">
        <a id="cat_people" href="?tag=people">People</a>
    </li>                           
    <li class="category">
        <a id="cat_animal" href="?tag=animal">Animal</a>
    </li>                           
    <li class="category">
        <a id="cat_web" href="?tag=web">Web</a>
    </li>                           
    <li class="category">
        <a id="cat_forum" href="?tag=forum">Forum</a>
    </li>                        
</ul>

和JS:

$(document).ready(function(){   
    $('#cat_').find('a').trigger('click');     
});

为什么猫名没有传递给JS函数?

编辑:数组。其中有很多名称,但我要选择5个名称

Array
(
[0] => 
[1] => 
[2] => 
[3] => 
[4] => 
[5] => Array
    (
        [freq] => 11
        [name] => Cars
    )

[6] => 
[7] => 
[8] => 
[9] => Array
    (
        [freq] => 5
        [name] => People
    )

[10] => 
[11] => 
[12] => Array
    (
        [freq] => 22
        [name] => Animal
    )

[13] => 
[14] => Array
    (
        [freq] => 6
        [name] => Web
    )

[15] => Array
    (
        [freq] => 14
        [name] => Forum
    )

[16] => 
...
) 

2 个答案:

答案 0 :(得分:1)

要么使用echo来打印变量,要么使用short open标签: 编辑,如果要第一个索引,则:

<?php
    $array = array_slice($filtered, 0, 5);
    $test = $array[0];
?>
<?php foreach ($array as $cat) : ?>
    <li class="category">
        <a id="cat_<?php echo $cat['name']?>" href="?tag=<?php echo 
$cat['name']?>"><?php echo $cat['name']?></a>
    </li>

<?php endforeach ?>

然后:

$(document).ready(function(){
    $('#cat_<?php echo $test['name'];?>').find('a').trigger('click');      
});

答案 1 :(得分:1)

首先,php:

基于评论和以后的问题编辑,预期的过滤条件是仅保留包含freq值大于5的子数组。为此,这里是array_filter()语法:

代码:(Demo

$filtered = array_filter($categories, function($row) { return $row['freq'] > 5; } );
$limited = array_slice($filtered, 0, 5);

foreach ($limited as $row) {
    echo "<li class=\"category\">";
        echo "<a id=\"cat_{$row['name']}\" href=\"?tag={$row['name']}\">{$row['name']}</a>";
    echo "</li>";
}

您尝试将第一个子数组的name值传递给javascript的错误失败,因为没有[0]索引可供访问-这本应该产生注意:未定义的偏移量。好消息是,如果您调整了jquery选择器,甚至不需要将变量传递给js,但是稍后就可以了解更多。

现在使用javascript:

要触发点击事件,请使用click()而不是.trigger('click')

要通过js自动触发的onclick事件缓解无限页面加载的问题,并确保javascript具有<a>的{​​{1}}元素,请进行检查以确保它还不是{{1 }}输入网址的查询字符串,然后在您的无序列表中至少要单击一个类别。

jquery选择器是click()。这意味着查找所有具有其父类值为tag的{​​{1}}标签。然后从生成的元素集合中,选择.category a中的第一个元素。

<a>