访问JavaScript中的多维PHP数组


Accessing to a multidimensional PHP array in JavaScript

我想显示一个jQuery对话框,其中包含表中一行的详细信息(只显示部分信息)。这是我想做的一个例子

问题是:当点击一行的"查看更多详细信息"图像时,JS函数会收到点击行的id。我不能像在代码的HTML部分那样为JS变量"data"赋值。我该如何解决这个问题?这是一个好方法吗?

<script>
    $(function() {    
        $( "#dialog" ).dialog({
            autoOpen: false,
            height: 400,
            width: 600,
            buttons: [{
                text: "Close",
                click: function() {
                    $(this).dialog("close");
                }
            }]
        });
        $(".details").click(function(){
            $("#dialog").empty();
            var i = $(this).attr('id');
            var data = <?=$cars[i]['price']?>;
            $("#dialog").append("<p>Car:"+data+"</p>");
            $("#dialog").dialog("open");
        });
    });
</script>
<table>
    <?php for($i = 0; $i < count($cars); $i++) { ?>
        <tr>
            <td><?=$cars[$i]['model']?></td>
            <td><?=$cars[$i]['colour']?></td>
            <td> 
                <img class="details" id="<?=$i?>" style="cursor: pointer;" src="http://localhost/ci/public/images/details.png" width="40" height="40" alt="Details"/>
            </td>
        </tr>
    <?php } ?>
</table>

有很多方法可以实现这一点,其中包括:

1) 如果数据是动态的,则使用Ajax

2) 如果是静态的,则可以使用以下任何一种-

  • a) 存储php-array-info-js-array并使用Key检索它,方法是将数组键设置为行id,并在行的onClick上从数组中获取数据。

  • b) 如果你想避免阵列,那么-

    • i) 使用需要为每一行显示的信息创建唯一的div。默认情况下,单击取消隐藏并显示为对话框
    • ii)创建一个带有参数的js函数,并使用作为参数传递给它的信息在其中启用对话框。对于每一行,通过将信息作为参数传递,在onClick事件上调用此函数

您试图使用客户端服务器上的数据,而不使用任何代码将其发送到客户端。您必须有一种方法将数据从php获取到javascript。这里有一个替代方案,它使用HTML数据属性。

在你的图像标签中这样做:

 <img class="details" id="<?=$i?>" data-price="<?=htmlentities($cars[$i]['price'])?>" style="cursor: pointer;" src="http://localhost/ci/public/images/details.png" width="40" height="40" alt="Details"/>

这只是以客户端可以轻松读取的形式保存了一些数据。htmlentities只是为了安全起见,以防变量包含引号字符(有意或无意)

我应该指出,在这一点上没有明确需要id属性,除非您将其用于其他用途。

然后,您可以将您的点击功能更改为以下内容(根据我的想法,未经测试,请参阅.data()的文档):

$(".details").click(function(){
        $("#dialog").empty();
        var data = $(this).data('price');
        $("#dialog").append("<p>Car:"+data+"</p>");
        $("#dialog").dialog("open");
    });