0

モジュールがあります。ユーザーがリンクをクリックすると、Ajax対応の送信ボタンがあるダイアログに新しいフォームが読み込まれます。私のダイアログでは、drupalのヘッダーやフッターなど全体を表示したくありません。私が表示しているのは、その新しいフォームの内容だけです。したがって、私のフォームは次のようにjson経由で出力されます。

$json['html'] = drupal_render(drupal_get_form('my_form'));
drupal_json_output($json); 

これは私が望むように機能し、フォームの内容のみが表示されます。ただし、これが発生した場合、ajaxが有効になっているそのフォームの送信ボタンはajaxを介して送信されません。代わりに、通常のボタンのように送信し、別のページの同じフォームに移動します。

フォームが正常に出力および表示され、ヘッダーとフッターが次のようになっている場合:

$output = drupal_get_form('my_form');
return $output;

すべてが正常に機能し、送信ボタンは「ajax対応」です。

新しいコンテンツを読み込んでいて、これらの新しいフォームコンテンツに動作が関連付けられていなかったことが原因である可能性があります。だから私のjsファイルでは、私もこれをしました:

$('a.my_link', context).click(function() {
//processing done here
$('#my_modal_dialog').html(jsondata['html']);
}, "json");
Drupal.attachBehaviors($('#my_modal_dialog'));

その少しの追加でも、問題は修正されませんでした。フォームが正常に出力された場合、ボタンがajaxボタンとして機能し、フォームのコンテンツのみが表示された場合、ajaxが機能しないのはなぜか疑問に思います。

誰かが答えを持ってくれることを願っています...よろしくお願いします。

4

3 に答える 3

1

私は問題を解決しました、そしてそれは次のリンクで見つけることができます:drupal.org/node/1517414

于 2012-04-11T07:10:05.387 に答える
0

問題は、ページの読み込み後に1回実行されるため、JavaScriptが新しいコンテンツに適用されていないことです。live()次の方法 を使用してみてください。

$('a.my_link', context).live("click", function() {
  ...
});

live()メソッドはjQuery 1.7で非推奨になっているようです:http://api.jquery.com/live/

上のメソッドまたはデリゲートに置き換えられたようです。

于 2012-04-06T08:38:23.400 に答える
0

$に置き換えられているかどうかを確認してくださいjQuery。おそらくこのヘルプです。

于 2012-04-06T11:43:56.173 に答える