Tôi có một hình thức Drupal, nhưng tôi đang thêm nó vào trang như là kết quả của một cuộc gọi lại AJAX.
Tôi cần hình thức này để kích hoạt một cuộc gọi lại mới. Mã của tôi dưới đây:
$form['#suffix'] = '<div id="form-return-message-box">this is the return box</div>';
$form['#attached']['js'] = array('misc/ajax.js');
$form['markup'] = array(
'#type' => 'markup',
'#markup' => '<h2>This is a form</h2>'
);
$form['button'] = array(
'#type' => 'button',
'#value' => t('Submit'),
'#ajax' => array(
'callback' => 'module_myform_callback',
'wrapper' => 'form-return-message-box',
'method' => 'replace',
'effect' => 'fade',
),
);
$replace_layer = '#somelayer';
$commands = array();
$commands[] = ajax_command_replace($replace_layer, drupal_render($form));
$page = array(
'#type' => 'ajax',
'#commands' => $commands,
);
ajax_deliver($page);
Vì vậy, đây là những gì xảy ra: biểu mẫu này đang được thêm vào một thùng chứa có tên là 'somelayer' đã tồn tại trên trang (Tôi đã không thêm phần mã đó vì tôi nghĩ rằng nó sẽ không cần thiết). Nó được gọi từ một liên kết với lớp 'use-ajax'.
Vì vậy, biểu mẫu hiển thị trên trang như mong muốn sau khi gọi lại AJAX được kích hoạt bởi liên kết. Phần này hoạt động ổn.
Nhưng đây là phần (rất) khó khăn: Tôi cũng muốn duy trì chức năng AJAX mẫu mới (kiểm tra phần '#ajax' của mảng), điều này không xảy ra. Sau khi biểu mẫu được hiển thị, nút sẽ không kích hoạt bất kỳ mã AJAX nào. Bằng cách nhấp vào nó, trang sẽ làm mới, không kích hoạt chức năng gọi lại (không được thêm vào đây để bảo toàn không gian).
Bằng cách xem xét mã nguồn của trang biểu mẫu thông thường với AJAX, bạn sẽ thấy mã như thế này cho phép chức năng AJAX:
"ajax":{"edit-something":{"callback":"module_formname_callback","wrapper":"wrapper-name","method":"replaceWith","effect":"fade","event":"change","url":"\/spabear\/system\/ajax" ...
Bằng cách xem mã nguồn của biểu mẫu được thêm vào trang của tôi, tôi có thể thấy không có đoạn <script></script>
mã nào có thể kích hoạt cuộc gọi lại AJAX ở dạng được tải động của tôi. Làm cách nào tôi có thể mô phỏng tất cả các chức năng AJAX khi biểu mẫu được hiển thị sau khi gọi lại AJAX?