Điểm:0

Cách lưu giá trị ajaxified trong biểu mẫu

lá cờ gb

Tôi thêm lệnh gọi lại ajax vào trường đã chọn

$form['field_equipe_membre']['widget']['#ajax'] = mảng(
'gọi lại' => 'ajax_desactive_unites_field_callback',
'sự kiện' => 'thay đổi',
'phương thức' => 'html',
'trình bao bọc' => 'chỉnh sửa trường-đoàn kết-de-recherche-trình bao bọc',
);

Từ trường trigger_element, tôi đã truy xuất thành công một giá trị thông qua yêu cầu db và chọn giá trị đó trong một trường chọn khác

$trigger = $form_state->getTriggeringElement();
$selected_equipe = $trigger['#value'];
 
truy vấn $....

$response = new AjaxResponse();
$content = '<option value=\"'.$row_unite['nid'].'\" selected=\"đã chọn\">'.$row_unite['title'].'</option>';
$response->addCommand( new AppendCommand('#edit-field-unite-de-recherche', $content));
trả lại phản hồi $;

Nhưng khi tôi gửi biểu mẫu, giá trị được chọn bởi cuộc gọi lại không được lưu.

Các dòng ma thuật hoặc phương pháp phù hợp để làm điều này là gì?

tôi đã thử nghiệm

$form_state->setRebuild();

trong cuộc gọi lại; Tôi cũng đã thử nghiệm

$form_state->setValue('field_unite_de_recherche', $row_unite['nid']);
$form_state->setCached(TRUE);

Tôi đã thử nghiệm giải pháp được đề xuất ở đâu đó trong diễn đàn này để xác định trường ẩn trong hook_form_edit_alter

$form['product_id']['#type']='hidden';
$form['product_id']['#prefix']='<div id="liberte_pid">';
$form['product_id']['#suffix']='</div>';

và lưu giá trị trong cuộc gọi lại

$form['product_id']['#value'] = mảng(
  $row_unite['nid'],
);

Nhưng không có giải pháp nào trong số này đưa ra giải pháp cho tôi.

Tôi cũng màu đỏ https://www.drupal.org/project/drupal/issues/2263569 trang, nhưng tôi không biết phải làm gì với.

Vì vậy: làm cách nào để lưu giá trị đã chọn này bằng lệnh gọi lại ajax?

Jaypan avatar
lá cờ de
Trong Drupal, bạn không thể thêm các thành phần biểu mẫu trong Gọi lại Ajax - chúng sẽ bị hệ thống bỏ qua. Chúng phải được thêm vào định nghĩa biểu mẫu, được lưu vào bộ đệm TRƯỚC cuộc gọi lại Ajax. Xem hướng dẫn này vào một ngày khác cho thấy ví dụ về cách thực hiện việc này: https://www.jaypan.com/tutorial/drupal-form-api-ajax-form-and-results-same-page
cocq avatar
lá cờ gb
Trong trường hợp của tôi, tôi đã không thêm các thành phần biểu mẫu trong lệnh gọi lại ajax của mình, tôi chọn đúng giá trị trong thành phần biểu mẫu hiện có từ yêu cầu db, chính từ yêu cầu của người dùng. Tôi đã cẩn thận bôi đỏ liên kết của bạn (và tôi đã cố gắng điều chỉnh mã của mình từ đó), nhưng nó được mã hóa từ một chương trình được xây dựng theo mẫu. Trong trường hợp của tôi, nó là một biểu mẫu tương tác phình to. Vì vậy, trong ví dụ của bạn, tôi không thể quản lý "return $form['search_results'];" trong chức năng "ajaxSubmit". Trên thực tế, tôi nghi ngờ rằng việc quản lý ajax chỉ có thể được thực hiện từ một tòa nhà lập trình có dạng. Tôi sẽ kiểm tra điều này sau. Vì vậy, cảm ơn cho các liên kết.
Jaypan avatar
lá cờ de
Tôi có thể thấy bạn thêm một `` trong lệnh gọi lại ajax của bạn, vì vậy bạn đang thêm các phần tử vào lệnh gọi lại ajax của mình. Bạn không thể thêm bất kỳ thứ gì vào lệnh gọi lại ajax, biểu mẫu đã được lưu vào bộ nhớ cache tại thời điểm đó.
cocq avatar
lá cờ gb
Xin lỗi, nhưng tôi không thêm giá trị, đó là lựa chọn giá trị phù hợp trong danh sách chọn. Nhưng xem xét rằng "biểu mẫu đã được lưu vào bộ nhớ cache tại thời điểm đó", việc cập nhật phần tử đã chọn là vô ích là điều bình thường!

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