drupal 7 FAPI- событие изменения ajax не работает с текстовым полем
Как вы используете событие изменения ajax для получения и отображения значения текстового поля в режиме реального времени (т.е. при каждом изменении значения отображается новое значение). Я пробовал следующее, но кажется, что #ajax['event']='change'
не работает с текстовым полем. Вызов Ajax запускается только тогда, когда текстовое поле теряет фокус, например, когда я пишу Hello в текстовом поле, оно не отображается, пока я не нажму за пределами текстового поля. Вот мой код:-
function test1_form($form, &$form_state)
{
$form['text']=array(
'#title'=>'Text:',
'#type'=> 'textfield',
'#ajax'=> array(
'event'=>'change',
'callback'=>'test1_form_submit',
'wrapper'=>'contnr',
'method'=>'replace',
),
);
$form['up_button']=array(
'#title'=>t('Preview:'),
'#type'=>'markup',
'#prefix'=>'<div id="contnr">',
'#suffix'=>'</div>',
'#markup'=>'<h2>This is to be replaced</h2>',
);
return $form;
}
function test1_form_submit($form, $form_state)
{
return $form_state['values']['text'];
}
Есть ли способ получить значение текстового поля в режиме реального времени и отобразить его обратно в браузере в модуле drupal 7???
1 ответ
Вы можете достичь того же результата, используя событие jQuery keydown().
Пример кода:
jQuery("#textFieldID").keydown(function(e) {
jQuery("#contnr").html("<h2>" + jQuery(this).val() + "</h2>");
// the above line can be broken into 2 lines as follows:
var myVal = jQuery(this).val(); // grab the textfield value
jQuery("#contnr").html("<h2>" + myVal + "</h2>"); // set the value to the div
});
Обновить:
Вы можете скопировать код JS в .js
файл (назовите это my-script.js
и поместите его в каталог вашего модуля), а затем используйте свойство #attached, чтобы добавить файл javascript на страницу следующим образом:
function test1_form($form, &$form_state)
{
$form['text']=array(
'#title'=>'Text:',
'#type'=> 'textfield',
'#ajax'=> array(
'event'=>'change',
'callback'=>'test1_form_submit',
'wrapper'=>'contnr',
'method'=>'replace',
),
);
$form['up_button']=array(
'#title'=>t('Preview:'),
'#type'=>'markup',
'#prefix'=>'<div id="contnr">',
'#suffix'=>'</div>',
'#markup'=>'<h2>This is to be replaced</h2>',
);
// the only code you need to add.
$form['#attached']['js'] = array(
drupal_get_path('module', 'test1') . '/my-script.js',
);
return $form;
}
Надеюсь, это решит вашу проблему... Мухаммед.