Điểm:1

Sử dụng gọi lại #submit trên trường văn bản

lá cờ cn

Chúng tôi cần thêm 'trường lặp lại' vào biểu mẫu dựa trên đầu vào được cung cấp trong trường văn bản. Thông thường, chúng tôi sử dụng nút 'thêm trường khác' để theo dõi số trường sẽ hiển thị trong xây dựngForm()và cập nhật số đó trong lệnh gọi lại gửi trên nút.

Tuy nhiên, chức năng chúng tôi muốn không phải là điều đó. Chúng tôi có nhu cầu để khi ai đó nhập văn bản vào trường văn bản (không phải trường trống), nó sẽ thêm một nhóm trường bổ sung bên dưới trường đó. Chúng tôi đang cho phép mọi người quét mã vạch và mỗi khi họ quét mã vạch vào trường văn bản, chúng tôi muốn nó tạo một nhóm trường khác để họ có thể quét một mục khác nếu muốn.

Chúng tôi đã cố gắng sử dụng #Gửi đi trên trường văn bản, nhưng #submit dường như không kích hoạt trên trường văn bản, vì chúng tôi đã thêm một câu lệnh in, cũng như một $form-state->set() trong đó, và cố gắng in ra $form_state->get() trên biểu mẫu vô ích.

Vì bạn không thể cập nhật form_state bên trong lệnh gọi lại ajax, nên chúng tôi không thể tìm ra cách để đạt được những gì chúng tôi muốn làm (Thêm một nhóm trường khác sau khi văn bản được nhập vào vùng văn bản).

Có cách nào khác chúng ta có thể làm điều này?

(Chúng tôi chỉ cho phép thêm 10 nhóm cho mỗi lần gửi, vì vậy, như một 'giải pháp thay thế', chúng tôi tự động thêm 10 nhóm vào buildForm, sau đó sử dụng #Những trạng thái để ẩn từng trường nếu trường văn bản trước đó không có dữ liệu, nhưng điều này không cho phép chúng tôi thêm nút 'xóa' cho từng trường văn bản để người dùng có thể xóa trường văn bản mà họ không muốn sử dụng.)

4uk4 avatar
lá cờ cn
Quy trình công việc cơ bản của một yêu cầu Ajax là kiểm tra việc xây dựng lại biểu mẫu `$form_state->getTriggeringElement()` và xây dựng một biểu mẫu với bao nhiêu phần tử biểu mẫu mới tùy thích.
Gold avatar
lá cờ kz
Góc 'trường có thể lặp lại' ở đây giống như những gì [Biểu mẫu thực thể nội tuyến](https://www.drupal.org/project/inline_entity_form) sẽ giải quyết. Chúng hoạt động tốt với API của các quốc gia và cũng cho phép bạn đặt số lượng mục tối thiểu/tối đa/không giới hạn.
Ex0r avatar
lá cờ cn
Đây là một biểu mẫu hoàn toàn dựa trên mô-đun, tất cả được tạo và hoạt động bên trong phương thức buuldForm(). Không có thực thể nào được đính kèm vào biểu mẫu.
Ex0r avatar
lá cờ cn
Và đối với $form_state, tôi đã nhận được phần tử kích hoạt, nhưng tôi không thể cập nhật trạng thái biểu mẫu bên trong lệnh gọi lại ajax nên tôi không thể xây dựng lại biểu mẫu với số lượng trường cần thiết.
Jaypan avatar
lá cờ de
Bạn có thể thêm nút gửi được kích hoạt ajax bằng CSS, sau đó sử dụng JS để 'nhấp vào' nút đó khi gõ phím (hoặc làm mờ hoặc bất kỳ thứ gì) kích hoạt lỗi #ajax. Bạn có thể đặt trình xử lý gửi của mình trên nút gửi.
4uk4 avatar
lá cờ cn
Không cần trình xử lý gửi khi xây dựng lại biểu mẫu qua Ajax. Bất cứ điều gì bạn đang cố gắng thực hiện trong trình xử lý gửi, hãy chuyển nó sang buildForm() để kiểm tra phần tử kích hoạt trong $form_state.

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