我有一个节点列表,每个节点都有一个点击。 click发送一个节点引用参数,该参数使用ajax加载新视图。 Jquery通过content-type-tpl.php上的隐藏输入值收集节点引用号。同样,新视图中的节点都有一个单击,它发送一个节点引用参数,该参数使用ajax加载一个新视图。但是,虽然原始视图中的点击工作正常,但新调用视图中的点击不会引用正确的节点。而不是引用被单击的节点的节点id,而是收集视图中下一个节点的节点id。奇怪的是,当将<?php echo $node->nid;?>
放在content-type-tpl.php上时,页面上会回显正确的节点ID。但遗憾的是,这不是发给观点论点的人。因此,单击新加载的ajaxed视图中的任何节点,将发送下一个节点的id。这是javacript:
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;
它是相同的代码,所以我无法理解为什么它在新加载的视图中的工作方式不同。谁能发现我做错了什么?我怀疑它与我声明我的变量的位置或方式有关。或者它可能与误用索引,eq或者这个有关?
答案 0 :(得分:0)
看起来Drupal.attachBehaviors应该在(目标)而不是(上下文)上触发。它在整个上下文中重新编写脚本,而不仅仅是新的ajaxed内容。所以我改变了Drupal.attachBehaviors(context); to Drupal.attachBehaviors(target);
现在有效!