it-swarm-vi.com

Tôi có thể sử dụng ajax để nhắm mục tiêu nhiều yếu tố hình thức từ một đầu vào không?

Tôi đang cố gắng sử dụng ajax để cập nhật hai phần khác nhau của biểu mẫu a drupal chỉ từ một hình thức mờ đầu vào.

Tôi có công cụ ajax tiêu chuẩn trên đầu vào của mình:

$my_form['my_input']['#ajax'] = array(
  'callback' => 'my_callback',
  'wrapper' => 'my_target_div',
  'event' => 'blur',
);

Điều này đang hoạt động tốt, hoán đổi div của tôi khi đầu vào được cập nhật ... tuy nhiên Tôi cũng muốn cập nhật một hình thức đầu vào khác ở dạng khác với mã khác do kết quả mờ trên đầu vào ban đầu của tôi .

Điều này có thể, bất kỳ ý tưởng?

Chỉnh sửa: Để rõ ràng, đây là ví dụ thế giới thực của tôi:

  • Loại nội dung 'phim'
  • Đã thêm trường 'chính_title'
  • Khi 'sơ cấp' được cập nhật, kiểm tra gọi lại ajax của tôi cho các chuỗi tương tự và trả về html.
  • Html từ cuộc gọi lại được chèn vào một div trống.

    Phần đó đang hoạt động rất tốt!

Tôi cũng đang cố gắng sửa đổi đầu vào 'tiêu đề' của nút tiêu chuẩn, cung cấp cho nó giá trị của 'primary_title' sau khi tôi đã thực hiện một số biểu thức chính để dọn dẹp chuỗi (loại bỏ "The" hoặc "A" khỏi đầu, v.v.) sẽ là hai trường tiêu đề, một trường có tiêu đề hoàn chỉnh 'chính_title' và một trường 'tiêu đề' được cắt xén sẽ hữu ích cho việc sắp xếp và hiển thị các bản ghi.

8
Rick

Dường như bạn có thể nhắm mục tiêu các phần khác nhau của biểu mẫu bằng các lệnh ajax, tuy nhiên bạn phải chọn trả về chỉ một của một trong hai:

  • HTML hoặc

  • Một mảng có thể kết xuất hoặc

  • Mảng AJAX lệnh

Trong tình huống ban đầu tôi đã viết, tôi đã cố gắng trả về cả một mảng AJAX lệnh một mảng có thể kết xuất , điều đó dường như không thể.

Mã trong mô-đun ví dụ thể hiện việc nhắm mục tiêu các phần khác nhau của biểu mẫu bằng cách sử dụng một mảng AJAX lệnh:

function ajax_example_advanced_commands_html_callback($form, $form_state) {
  $text = $form_state['values']['html_command_example'];

  $commands = array();
  $commands[] = ajax_command_html('#html_div', $text);
  $commands[] = ajax_command_replace("#html_status", "<div id='html_status'>Updated html_command_example with text=$text;  " . date('r') . "</div>");
  return array('#type' => 'ajax', '#commands' => $commands);
}

Trong mẫu mã này, #html_div đang nhận $ text và riêng #html_status sẽ nhận được "Cập nhật html_command_example với text = $ text;". ngày ('r'). ""

Hai vị trí khác nhau trên một biểu mẫu với hai mẩu thông tin khác nhau từ một cuộc gọi lại ajax!

Nhìn lại những gì tôi đang làm, tôi nhận ra rằng tôi không cần phải trả lại trường tiêu đề nút. Nó sẽ chỉ là một trường tiện ích, được sử dụng để sắp xếp dữ liệu trong danh sách.

Tôi đã ẩn trường trên biểu mẫu nút và nó được điền vào lần thứ hai biểu mẫu của tôi được tạo khi gọi lại ajax ban đầu của tôi được kích hoạt.

13
Rick

Một tùy chọn khác, từ drupal.org :

Bạn có thể dễ dàng thay thế toàn bộ biểu mẫu nếu điều đó là dễ nhất. Chỉ cần thêm #prefix và #suffix vào toàn bộ mảng biểu mẫu, sau đó đặt đó là #ajax ['Wrapper']. (Điều này sẽ cho phép bạn thay đổi nhiều thành phần biểu mẫu thông qua một lệnh gọi ajax duy nhất.) Lý do duy nhất để không làm điều này là quá trình này nhanh hơn nếu truyền ít thông tin hơn.

Funciton gọi lại của bạn có thể đơn giản như:

function _callback($form, $form_state) {
  return $form;
}

Điều đó nên được gọi từ một mảng #ajax Trên một phần tử biểu mẫu (field_whatever Cho ví dụ bên dưới) được xác định trong một hook_form_FORM_ID_alter() (hoặc một loại biểu mẫu thay đổi hook) trong đó bạn đồng thời kiểm tra $form_state và thực hiện các thay đổi cho mảng $form, như:

 if (isset($form_state['values']['field_whatever'])){
     $form['field_something']['#disabled'] = TRUE;
     $form['field_something_else']['#disabled'] = FALSE;
 } else {
     $form['field_something']['#disabled'] = FALSE;
     $form['field_something_else']['#disabled'] = TRUE;
 }
0
cdmo

Tôi còn khá mới với Drupal nhưng cho đến nay tôi thấy khung công tác Ajax khá không linh hoạt. Nó hoạt động rất tốt miễn là bạn sử dụng nó như dự định. Vì vậy, trong trường hợp của bạn nếu bạn biết một số JS điều tốt nhất sẽ là dứt khoát là làm cho kịch bản đó trở thành chính mình.

Chúc may mắn!

0
silkAdmin