drupal 7如何在文本字段更改时触发ajax回调
我正在尝试添加一个ajax回调,当文本输入字段被更改时将被触发,但我不知道如何做。我已经尝试过在表单_alter hook中向字段添加ajax事件(这对于选择字段很有效),但没有触发:drupal 7如何在文本字段更改时触发ajax回调,ajax,drupal,drupal-7,drupal-forms,Ajax,Drupal,Drupal 7,Drupal Forms,我正在尝试添加一个ajax回调,当文本输入字段被更改时将被触发,但我不知道如何做。我已经尝试过在表单_alter hook中向字段添加ajax事件(这对于选择字段很有效),但没有触发: my_form_alter(&$form, &$form_state) { form['my_text_field'][LANGUAGE_NONE]['#ajax'] = array( 'callback' => 'my_text_field_callback',
my_form_alter(&$form, &$form_state) {
form['my_text_field'][LANGUAGE_NONE]['#ajax'] = array(
'callback' => 'my_text_field_callback',
'wrapper' => 'my-field-wrapper',
'method' => 'replace',
'event' => 'change'
);
}
回调非常简单:
function my_text_field_callback($form, &$form_state) {
return $form['my_text_field'];
}
我也尝试过按键事件,但无法启动回调。也许此链接可以帮助您:
- 必须仅在form builder函数中对表单进行更改(此处示例中为ajax\u example\u autocheckbox()),否则验证将失败。回调函数不能改变窗体或任何其他状态
- 关于Ajax回调和#默认#值:当Ajax替换页面上的表单元素时,表单字段值不会自动填充为#默认#值。但是,在使用Ajax回调时,还有其他方法可以设置默认值。有关进一步的讨论/提示和示例代码,请参见这些链接:表单API:默认值不会更改,默认值不适用于Ajax回调中的单选按钮
- 可以替换页面上的任何HTML,而不仅仅是表单元素。这只是提供包装器ID的问题
- 如果最简单的话,您可以轻松地替换整个表单。只需在整个表单数组中添加#前缀和#后缀,然后将其设置为#ajax['wrapper']。(这将允许您通过一个ajax调用更改多个表单元素。)不这样做的唯一原因是,如果传输的信息较少,则流程会更快
- 请记住,回调函数中处理的$form已经通过所有表单处理函数发送(但尚未发送到drupal_render())。因此,在调整时,比如说,元素的标记很简单: $elements['some_element']['#markup']='newmarkup' 返回$elements
- 更改已转换为#属性的值 属性意味着深入挖掘$form数组,以及 更改该元素的相应属性 //两者都要做 $elements['some_element']['#disabled']=TRUE $elements['some_element']['#attributes']['disabled']='disabled' 返回$elements
- 必须仅在form builder函数中对表单进行更改(此处示例中为ajax\u example\u autocheckbox()),否则验证将失败。回调函数不能改变窗体或任何其他状态
- 关于Ajax回调和#默认#值:当Ajax替换页面上的表单元素时,表单字段值不会自动填充为#默认#值。但是,在使用Ajax回调时,还有其他方法可以设置默认值。有关进一步的讨论/提示和示例代码,请参见这些链接:表单API:默认值不会更改,默认值不适用于Ajax回调中的单选按钮
- 可以替换页面上的任何HTML,而不仅仅是表单元素。这只是提供包装器ID的问题
- 如果最简单的话,您可以轻松地替换整个表单。只需在整个表单数组中添加#前缀和#后缀,然后将其设置为#ajax['wrapper']。(这将允许您通过一个ajax调用更改多个表单元素。)不这样做的唯一原因是,如果传输的信息较少,则流程会更快
- 请记住,回调函数中处理的$form已经通过所有表单处理函数发送(但尚未发送到drupal_render())。因此,在调整时,比如说,元素的标记很简单: $elements['some_element']['#markup']='newmarkup' 返回$elements
- 更改已转换为#属性的值 属性意味着深入挖掘$form数组,以及 更改该元素的相应属性 //两者都要做 $elements['some_element']['#disabled']=TRUE $elements['some_element']['#attributes']['disabled']='disabled' 返回$elements