Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
drupal 7如何在文本字段更改时触发ajax回调_Ajax_Drupal_Drupal 7_Drupal Forms - Fatal编程技术网

drupal 7如何在文本字段更改时触发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',

我正在尝试添加一个ajax回调,当文本输入字段被更改时将被触发,但我不知道如何做。我已经尝试过在表单_alter hook中向字段添加ajax事件(这对于选择字段很有效),但没有触发:

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


您确定它不起作用吗?AFAIK更改事件仅在文本字段失去焦点时触发。尝试输入或键控事件。您确定它不工作吗?AFAIK更改事件仅在文本字段失去焦点时触发。请尝试输入或键控事件。感谢您提供这样一个完整的细分。很多有用的信息,但在本例中,我尝试在form builder函数中创建回调,而不是在回调中创建回调。或者我遗漏了什么?也许尝试另一种事件类型?使用选择框或复选框更改类型更有效,请尝试另一个文本字段,如keyup?感谢您提供的完整分类。很多有用的信息,但在本例中,我尝试在form builder函数中创建回调,而不是在回调中创建回调。或者我遗漏了什么?也许尝试另一种事件类型?使用选择框或复选框更改类型更有效,请尝试另一种文本字段,如keyup?