2

CCK の複数値フィールドで「別のアイテムを追加」するときに、最後のフィールド アイテムにフォーカスしようとしています。

これが私のコードです:

 $("#node-form table.content-multiple-table tr.draggable input[type='text']").live("keydown", function (e) {
  if (e.which == 13) {
   $(this).closest("table.content-multiple-table").siblings("div.content-add-more").find("input.form-submit").mousedown();
   $(this).closest("tr.draggable").next().find("input[type='text']").trigger("focus");
   return false;
  }
 });

フィールドはAHAH応答で作成されるため、明らかにこれは機能しません。:(

応答にフックして最後のフィールドにフォーカスする方法を知っている人はいますか? ありがとう。

4

4 に答える 4

3

Drupal.behaviorsを使用する必要があり、Drupalは動作のアタッチを管理する必要があります。モジュールは、DOM(AHAH要求を含む)を変更した後にこれらを再実行する必要があります。

あなたの場合、おそらく2つの動作を追加する必要があります。1つはボタンが押されたことを示すフラグを立てる動作、もう1つはフラグが設定されている(そしてフラグを設定解除する)場合にフォーカスする最後のフィールドに動作を追加します。

于 2010-01-22T07:20:27.517 に答える
1

cck/includes/content.node_form.incのソース コード、より正確にはcontent_add_more_js関数のこの部分を見てください。

  // Build our new form element for the whole field, asking for one more element.
  $form_state['item_count'] = array($field_name => count($_POST[$field_name]) + 1);
  $form_element = content_field_form($form, $form_state, $field);
  // Let other modules alter it.
  drupal_alter('form', $form_element, array(), 'content_add_more_js');

これは、新しいフィールドを生成した後、ページに追加する前に呼び出されるように見えるため、form_id が「content_add_more_js」である hook_form_alter をセットアップする必要があると思います。

私はまだそれを試していませんが...


ウサマ・ムバラク //セミアディクト

于 2010-02-16T15:49:46.317 に答える
0

最後に使用: http://api.jquery.com/last

于 2010-01-22T04:15:43.767 に答える
0

私は同様の問題を抱えていました(D6で、D7では異なる場合があります)。鍵交換中です

jQuery(document).ready(function(){
//your stuff happens
});

と:

Drupal.behaviors.myModuleBehavior = function (context) {
//your stuff happens
};
于 2011-07-26T12:23:41.550 に答える