0

我的很多 PHP 代码创建了一个动态 ID 选择器,因为在执行 PHP 代码之前我没有 IDattr值,所以我发现自己采取了捷径并将 jquery javascript 代码作为正在创建的 ID 的名称。

所以我想知道是否还有其他方法可以做得更好。我目前的方法有效,但我知道这是不好的做法。

为了说明我在做什么:

for ($x=0;$x>=10; $x++){
echo "...
    <script>
    $(function() {
    $( \"#dialog{$x}\" ).dialog({
        autoOpen: false,
        show: \"blind\",
        hide: \"explode\"
    });
    $( \"#opener{$x}\" ).click(function() {
      $( \"#dialog{$x}\" ).dialog( \"open\" );
        return false;
    });
    </script>
    ...";


  echo "<a id=\"opener{$x}\"> View Notes</a>";
  echo "<div id=\"dialog{$x}\">some data also dynamically generated depending on value of $x</div>";
}
4

3 回答 3

1

我会说,更改 javascript 并将其放在循环之外。

您可以将其作为一个类而不是放置一个唯一的 id:

echo "<a id=\"opener{$x}\" class=\"myclass\"> View Notes</a>";

然后将javascript移出循环并正常打印出来。

<script>
    $(function() {
    $('.myclass').dialog({
        autoOpen: false,
        show: "blind",
        hide: "explode"
    });
$('.myclass').click(function() {
      $(this).dialog("open");
        return false;
    });
</script>

我希望你能明白我的意思。但是,如果您使用 id 有什么特别的原因,那么您的代码就可以了。

编辑:如果这是您的所有代码,并且您决定改用类,则不需要循环将所有 id 输出。但是如果你以后想用那个 id 做一些事情,它可能会派上用场。就像通过 ajax 发布请求将其发送到服务器端一样。

于 2012-10-18T20:43:57.373 回答
1

您应该使用类和数据属性编写 HTML 标记。

例如:

<a href="#" class="opener" data-id="1">View Notes</a>
<div class="notes" data-id="1">My notes here</div>

<a href="#" class="opener" data-id="2">View Notes</a>
<div class="notes" data-id="2">My other notes here</div>

然后编写您的 JavaScript 以使用类选择器获取一系列选项。

$('.notes').dialog({
    autoOpen: false,
    show: "blind",
    hide: "explode"
});

$('.opener').click(function(e) {
    $('.notes[dataId==' + $(this).data('id')).dialog('open');
    e.preventDefault();
});
于 2012-10-18T20:46:51.027 回答
0

WordPress 处理 JavaScript 本地化的方式是使用内联 SCRIPT 标签来设置变量,然后在外部 JS 文件中引用这些变量。这避免了将整个脚本内联,同时允许在 PHP 和 JavaScript 之间传递数据。使用可以使用此方法将总数传递给外部文件中的 JS 脚本,因为变量是全局声明的。

对于您的示例,您可以将内联脚本更改为:

<script>
    var dialog_count = 10;
</script>

这将设置可用对话框的数量,并将对话框功能移动到 JS 文件中。您需要更改函数以获取要注册的索引的参数,然后遍历调用此函数的每个索引,以使用 dialog_count 值作为总数来注册每个索引。

于 2012-10-18T20:49:47.343 回答