0

我有一个节点列表,每个节点都可以单击。单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。Jquery 通过 content-type-tpl.php 上的隐藏输入值收集节点参考号。同样,新视图中的每个节点都有一个单击,该单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。然而,虽然原始视图中的点击工作正常,但新调用视图中的点击并没有引用正确的节点。不是引用被单击节点的节点 ID,而是收集视图中下一个节点的节点 ID。放置时奇怪<?php echo $node->nid;?>在 content-type-tpl.php 上,正确的节点 ID 会在页面上回显。但遗憾的是,这不是发送到视图参数的那个。因此,单击新加载的 ajaxed 视图中的任何节点,都会发送下一个节点的 id。这是java脚本:

Drupal.behaviors.ajaxlinks = function (context) {
    $('.morelink:not(.togg-processed)', context).addClass('togg-processed').each(function () {
      var myindex = $('.morelink').index($(this));
      var target = $('.newthing').eq(myindex)
      var nid = $(".mynid").eq(myindex).val();
    $(this).click(function() {
if (($('.hiddenrows').eq(myindex).is(":hidden")))
{    $('.hiddenrows').eq(myindex).show();
    $('.newthing').eq(myindex).show();
      var toLoad = Drupal.settings.basePath + 'replies/' + nid;
      xhr = $.ajax({
        url: toLoad,
        success: function(data) {
        $(target).html($(data));
     Drupal.attachBehaviors(context);
}
});
}
else
{
    $('.hiddenrows').eq(myindex).hide();
    $('.newthing').eq(myindex).hide();
}
    return false;

这是相同的代码,所以我看不出为什么它在新加载的视图中工作方式不同。谁能发现我做错了什么?我怀疑这与放置变量或声明变量的方式有关。或者可能与滥用 index 、 eq 或 this 有关?

4

1 回答 1

0

看起来 Drupal.attachBehaviors 应该在 (target) 而不是 (context) 上触发。它在整个上下文中重新启动脚本,而不仅仅是新的 ajaxed 内容。所以我改变了 Drupal.attachBehaviors(context); 到 Drupal.attachBehaviors(target);

现在它起作用了!

于 2012-05-31T18:43:46.230 回答