2012-04-06 6 views
0

ユーザーがリンクをクリックすると、Ajax対応の送信ボタンがあるダイアログで新しいフォームをロードしています。私のダイアログでは、Drupalヘッダーとフッターなどの全体を表示したくありません。私が表示しているのは、その新しいフォームの内容です。したがって、私のフォームはjsonを介して次のように出力されます:Ajaxボタンが新しくロードされたフォームのコンテンツで機能していない - Drupal 7

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

私が望むように動作し、フォームの内容だけが表示されます。しかし、これが起こると、ajax対応のフォームのsubmitボタンはajaxを介して送信されません。代わりに、通常のボタンのように提出し、別のページの同じフォームに私を連れて行く。

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

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

すべてがうまく動作し、私のsubmitボタンが「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が機能しないのはなぜかと思います。

誰かが願っています...事前に感謝します。

答えて

1

問題が解決しました。次のリンクにあります:drupal.org/node/1517414

+0

リンクが悪くなったときに、ここで解決策を再現できますか? –

0

JavaScriptが新しいコンテンツに適用されていないというのは、ページが読み込まれた後に一度実行されるためです。 live()方法を使用してみてください:ライブ()メソッドはjQueryの1.7で廃止されているようだ

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

注こと:http://api.jquery.com/live/

方法onまたはdelegateに置き換えられているようです。

+0

私はlive()とon()を使ってみましたが、どちらもうまくいきませんでした。私はDrupal.behaviors/settingsを適用して何かをしなければならないことを知っています。そこでは、ビヘイビア/設定が新しいコンテンツにも適用されます。私はそれをする正しい方法が何かを知る必要があります。 –

0

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

+0

$()の使用に問題はありません。 – jskulski

+1

私は問題を解決しました。それは次のリンクにあります:http://drupal.org/node/1517414。 –