Điểm:0

Rerun behaviors

lá cờ cn

In order to output the SearchApiAutoCompleteFormBlock (view) within a modal, we lost the bound JavaScript events on the input. In other words, the DOM element (<div>) for the block was recreated by JavaScript after Drupal adds the events.

Now we need to rebind the events for the autocomplete.

This is the behavior of the Search API autocomplete module.

Drupal.behaviors.searchApiAutocomplete = {
attach: function (context, settings) {
  // Find all our fields with autocomplete settings.
  $(context)
    .find('.ui-autocomplete-input[data-search-api-autocomplete-search]')
    .once('search-api-autocomplete')
    .each(function () {
      var uiAutocomplete = $(this).data('ui-autocomplete');
      if (!uiAutocomplete) {
        return;
      }
      var $element = uiAutocomplete.menu.element;
      $element.addClass('search-api-autocomplete-search');
      var elementSettings = autocomplete.getSettings(this, settings);
      if (elementSettings['delay']) {
        uiAutocomplete.options['delay'] = elementSettings['delay'];
      }
      if (elementSettings['min_length']) {
        uiAutocomplete.options['minLength'] = elementSettings['min_length'];
      }
      // Override the "select" callback of the jQuery UI autocomplete.
      var oldSelect = uiAutocomplete.options.select;
      uiAutocomplete.options.select = function (event, ui) {
        // If this is a URL suggestion, instead of autocompleting we
        // redirect the user to that URL.
        if (ui.item.url) {
          location.href = ui.item.url;
          return false;
        }

        var ret = oldSelect.apply(this, arguments);

        // If auto-submit is enabled, submit the form.
        if (elementSettings['auto_submit'] && elementSettings['selector']) {
          $(elementSettings['selector'], this.form).trigger('click');
        }

        return ret;
      };
    });
}

I would expect there is some kind of mechanism to re-register view block contexts. I have no idea if this can be done easily. Any help is appreciated.

lá cờ cn
Có thể có sự hiểu lầm, nhưng nếu bạn đã thay đổi DOM và muốn liên kết lại các hành vi, thông thường bạn chỉ cần chạy `Drupal.attachBehaviors()`
mogio avatar
lá cờ cn
Cảm ơn Clive. Tôi đã thử "Drupal.attachBehaviors()" trước đây - nó không hoạt động do sự cố hoàn toàn không phụ thuộc. Nhưng bài đăng của bạn đã hữu ích khi tôi kiểm tra lại toàn bộ tập lệnh và có thể tìm ra vấn đề.
Câu hỏi này là trong các ngôn ngữ khác:

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.