簡體   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