0

2 つの依存フィールドを持つフォームを作成しています。1 つ目は 2 つ目をフィルタリングしています。Drupal 7 Form API を使用しており、最初のフィールドに「#ajax」プロパティを指定して実行しています。最初のフィールドは Drupal のオートコンプリートで、これが原因で「変更」イベントがトリガーされない可能性があります。Firefox では正常に動作しますが、Chrome と IE では動作しません。

js スクリプトで変更イベントを確認しようとしましたが、まったくトリガーされません。

何か案は?

4

3 に答える 3

0

Drupal 7 Autocomplete は event を使用しますautocompleteSelect。これには、マウスまたはキーボードを使用した場合の選択と変更が含まれます。#ajaxフォームを作成または変更する方法に応じて、さまざまな場所でプロパティを設定する必要があります。my_すべてのプレフィックス値をコード固有の変数に置き換えます。

コードで自分でフォームを作成するのは次のようになります。

$form['my_field']['#ajax'] = array(
  'event' => 'autocompleteSelect',
  'callback' => 'my_callback',
  'wrapper' => 'my_wrapper',
);

これを使用hook_form_FORM_ID_alter()すると:

$form['my_field']['my_language'][0]['target_id']['#ajax'] = array(
  'event' => 'autocompleteSelect',
  'callback' => 'my_callback',
  'wrapper' => 'my_wrapper',
);
于 2016-03-02T21:38:37.920 に答える
0

/misc/autocomplete.js のファイルに次の変更を加えます。

変化する:

Drupal.jsAC.prototype.select = function (node) {
  this.input.value = $(node).data('autocompleteValue');
};

に:

Drupal.jsAC.prototype.select = function (node) {
  this.input.value = $(node).data('autocompleteValue');
  $(this.input).trigger('change');
};

これにより、オートコンプリート リストの選択肢がクリックされたときに、変更トリガーが機能するようになります。

矢印キーで選択して Enter キーを押したときに変更がトリガーされるようにするには、hidePopup 関数の変更にトリガーを追加する必要があります。

Drupal.jsAC.prototype.hidePopup = function (keycode) {
  // Select item if the right key or mousebutton was pressed.
  if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) {
    this.input.value = $(this.selected).data('autocompleteValue');
  }
  // Hide popup.
  var popup = this.popup;
  if (popup) {
    this.popup = null;
    $(popup).fadeOut('fast', function () { $(popup).remove(); });
  }
  this.selected = false;
  $(this.ariaLive).empty();

};

に:

Drupal.jsAC.prototype.hidePopup = function (keycode) {
  // Select item if the right key or mousebutton was pressed.
  if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) {
    this.input.value = $(this.selected).data('autocompleteValue');
    $(this.input).trigger('change');
  }
  // Hide popup.
  var popup = this.popup;
  if (popup) {
    this.popup = null;
    $(popup).fadeOut('fast', function () { $(popup).remove(); });
  }
  this.selected = false;
  $(this.ariaLive).empty();

};

これらの変更を autocomplete.js ファイルに加えたら、通常どおり .change トリガーを呼び出すことができるはずです。

于 2014-11-09T19:00:47.393 に答える
-2

「autocompletechange」イベントを使用してみてください。コードが好きな人もいます

$('your selector').on('autocompletechange', function() {
    code;
});
于 2013-09-30T18:14:28.253 に答える