Điểm:0

Thêm một trình lắng nghe sự kiện để chọn danh sách

lá cờ cn

Tôi đã đính kèm js sau vào trường biểu mẫu chế độ xem được hiển thị và nó hoạt động khi tải trang đầu tiên nhưng khi biểu mẫu được thay đổi (bởi ajax) thì nó không kích hoạt.

Tôi hoàn toàn không thể tìm ra nơi để thêm trình xử lý sự kiện để thay đổi danh sách đã chọn.

Phần sau đây không sử dụng jQuery nhưng sử dụng thư viện lõi một lần vì vậy tôi muốn tránh jQuery.

/**
 * @tập tin
 * Điều chỉnh trang đích.
 */

 (hàm (Drupal, một lần) {
    'Sử dụng nghiêm ngặt';
  
    /**
     * Hành vi được đính kèm cho DataLayer tùy chỉnh.
     *
     * @type {{đính kèm: Drupal.behaviors.CurrentSelectOption.attach}}
     */
    Drupal.behaviors.CurrentSelectOption = {
      đính kèm: chức năng đính kèm (bối cảnh) {
        // Tải trang đầu tiên
        let elements = once('CurrentSelectOption', 'select#edit-field-event-country.form-select', context);
        phần tử.forEach (xử lýCallback);
      }
    };
  
    chức năng xử lýCallback(giá trị, chỉ mục) {
      hãy để tùy chọn = value.options[value.selectedIndex]
      value.remove (tùy chọn);
      giá trị.add (tùy chọn, 0);
    }

})(Drupal, một lần);
Jaypan avatar
lá cờ de
Tại sao bạn tránh jQuery? Nó đi kèm với lõi. Đã gần 2 thập kỷ kể từ khi tôi viết JS thô mà không có jQuery, vì vậy thật khó để tôi cung cấp giải pháp, mặc dù tôi có một giải pháp không có yêu cầu đó.
lá cờ cn
Tôi không muốn thêm một phụ thuộc khác vào tập lệnh nếu tôi không phải làm và nó hoạt động ngoài việc không được kích hoạt khi biểu mẫu được thay đổi. Tôi không có gì chống lại jQuery :-)
Điểm:0
lá cờ cn

Khi một lệnh gọi AJAX được thực hiện thông qua API Drupal, các hành vi sẽ được đính kèm lại. Vì vậy, nếu API đang được sử dụng, câu trả lời đơn giản là đặt mã vào bên trong gắn phương pháp trong hành vi của bạn, nơi bạn đã có nó.

Điều khó khăn là: không sử dụng ID để nhắm mục tiêu các phần tử. Đây là một quy tắc thực hành chung tốt nhất cho lựa chọn CSS/JS DOM, nhưng đặc biệt quan trọng ở đây, vì Drupal sẽ tạo một ID mới cho thành phần biểu mẫu mà nó thay thế. Nếu bạn kiểm tra lựa chọn và trình bao bọc của nó sau lệnh gọi AJAX, bạn sẽ thấy -2 được thêm vào ID ban đầu.

Ngoài ra (không có kiểm tra) mã của bạn trông ổn.

lá cờ cn
Tôi đã quên rằng :-) sử dụng một lớp đã giải quyết vấn đề.

Đă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.