繁体   English   中英

变量未从PHP传递到JavaScript

[英]Variable is not passed from PHP to JavaScript

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

<?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] => 
...
) 

使用echo打印变量或使用短打开标记:编辑,如果需要第一个索引,则:

<?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');      
});

首先,php:

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

代码:( 演示

$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]索引-这应该已经产生了注意:未定义的offset 好消息是,如果您调整了jquery选择器,甚至不需要将变量传递给js,但是稍后就可以了解更多。

现在的javascript:

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

为了减轻通过js自动触发的onclick事件导致的无限页面加载的问题,并确保javascript具有click()<a>元素, click()检查该URL的查询字符串中是否尚未包含tag键,并且在您的无序列表中至少要单击一个类别。

jQuery选择器是.category a 这意味着找到所有的<a>具有与类值父标签category 然后从生成的元素集合中,选择[0]作为第一个元素。

<?php 
if (!isset($_GET['tag']) && count($limited)) {  // start php condition block
    ?><script>                                 // leave php, enter js
    $(document).ready(function(){              // after the page fully loads
        $('.category a')[0].click();           // trigger the onclick event
    });
    </script><?php                             // leave js, re-enter php
}                                              // close the condition block
?>                                             // leave php if writing more html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM