我遇到了Drupal 7问题及其内置的ajax框架。 我的字段在用户填写时逐步注册,并在提交表单时进行最终检查(此时没有js)。除了我的提交按钮之外,我正在为每个字段使用#ajax回调:
$form['myfield'] = array(
'#type' => 'textfield',
'#default_value' => 'test',
'#title' => 'test',
'#ajax' => array(
'callback' => '_form_submit_callback',
'wrapper' => 'name-error-icon-container',
'method' => 'html',
'effect' => 'none',
'progress' => array(
'message' => NULL,
),
)
);
//EDIT: My callback as asked
function _form_submit_callback($form, &$form_state)
{
form_state_values_clean($form_state); //Remove unuseful values from $form_state['values']
$hash = $form_state['values']['hash'];
$currData = db_select('my_custom_table', 'rms')
->condition('hash', $hash)
->forUpdate(true)
->fields('rms')
->execute()
->fetchAssoc();
if (is_array($currData)) {
if ($currData != $form_state['values']) {
$form_state['values']['updated_at'] = time();
$num_updated = db_update('my_custom_table')
->fields($form_state['values'])
->condition('hash', $hash)
->execute();
}
}
} else {
$form_state['values']['inserted_at'] = $form_state['values']['updated_at'] = time();
db_insert('my_custom_table')
->fields($form_state['values'])
->execute();
}
}
这使我可以知道用户在哪里以及哪个字段已经完成。
在最后一个领域之前,一切都很顺利。用户输入字段并更改值。该字段仅在用户离开时使用ajax查询进行更新。
因此,每次用户离开某个字段时,都会调用_form_submit_callback函数并更新我的内容。
当用户点击提交表单按钮时出现问题。发送两个更新查询,一个带有ajax,离开字段,另一个带有表单提交功能。
当我点击提交按钮时,如何防止Drupal发送ajax查询?有没有办法删除每一个电话或只是禁用ajax到处?我检查了模糊,改变,聚焦事件,但没有任何工作,似乎Drupal正在使用自己的事件。我在浏览器中看到一个名为Drupal.ajax的js对象,也许我可以用它做点什么?
我现在已经有几天了。我很累:f如果你有任何想法?谢谢!