1

Drupal でティーザーを表示しています。各ティーザーには、ノード ID を引数として送信して ajax 経由でビューをロードする click() ハンドラーがあります。2 つの異なる jquery アプローチを試しましたが、うまくいきません。

最初の例では、ビューの最後のノードのみの nid を送信します。そのため、どのティーザーをクリックしても、最後のティーザーの nid のみが送信されます。

Drupal.behaviors.ajaxview = function(context) {
    $(".ajaxclick").click(function(){
    $(".container").load(Drupal.settings.basePath + "myajax/" + <?php echo $node->nid;?>;);
});
}

2 番目のアプローチでは、クラス "ajaxview" のボタンをクリックすると正しい nid が送信されますが、1 回クリックされたボタンを対応する div に送信する代わりに、"ajaxview" のクラスを持つ各ボタンの nid が送信されます。 "コンテナ"のクラスを持つ各divに"。そのため、すべてのティーザーから生成されたすべてのビューのコンテンツをすべての div にまとめます。うわあああ!

$(document).ready(function() {
$(".ajaxclick").click(function(){
    $(".container").load(Drupal.settings.basePath + "myajax/" +  <?php echo  $node->nid; ?>);

});
});

これがボタンです。

<button class="ajaxclick">click</button>

そしてdiv:

<div class="container"></div>

各クリックを取得して、クリックしたティーザーの nid を引数として送信し、そのビューのみをロードする方法はありますか?

4

2 に答える 2

0

Ionut.A の提案のリビジョンを使用して動作させることができたことがわかりました。

Drupal.behaviors.ajaxview = function(context) {
    $(".ajaxclick").click(function(){
    var nid = $(".mynid").eq($('.ajaxclick').index( $(this) )).val();
    $('.container').eq($('.ajaxclick').index( $(this) )).load(Drupal.settings.basePath + 'myajax/' + nid);
    return false;
});
}

そしてhtmlの場合;

<input type="hidden" class="mynid" value=<?php echo $node->nid;?> />

IDは最初のノードからのIDのみを返すため、IDの代わりにクラスを使用する必要がありました。

于 2012-04-22T08:31:46.520 に答える
0

あなたのコードはjavascriptです。次のものは使用できません。

<?php echo  $node->nid; ?>

必要な nid を取得するには、jQuery アプローチを使用する必要があります。たとえば、次のような非表示のフィールドに nid がある場合:

<input type="hidden" id="ID" value="100" />

次の jQuery を使用して nid を取得できます。

var nid = $("#ID").val();
于 2012-04-18T19:32:38.397 に答える