У меня есть форма, созданная путем цикла через массив:
$fields = array('firstName' => array( 'id' => 'firstName',
'name'=>'firstName',
'label'=>'First Name',
'class'=>'fill',
'size'=>'32',
'maxLength'=>'32'),
'lastName' => array( 'id' => 'lastName',
'name'=>'lastName',
'label'=>'Last Name',
'class'=>'fill',
'size'=>'32',
'maxLength'=>'32'),
результаты этого передаются классу, который формирует форму:
$form = new Form;
echo "<div class='leftCenter'>" . $form->text($id,$name,$class,"someValue",$size,$maxLength) . "</div>";
класс:
class Form{
public function text($id,$name,$class,$value,$maxLength,$size)
{
$str = "<input type='text' name='" . $id . "' id='" . $name. "' value='" . $value . "' size='" . $size . "' maxLength='" . $maxSize . "'>\n";
return $str;
}
}
и результаты:
<input type='text' name='firstName' id='firstName' class='fill' size='12' maxLength='32'>
<input type='text' name='lastName' id='lastName' class='fill' size='12' maxLength='32'>
У меня есть слушатель jquery, который слушает событие изменения
$('.fill').on('change', function(){
alert($(this).val());
});
я тоже попробовал
$('.fill').blur(function(){
alert($(this).val());
});
а также
$('.fill').change(function(){
alert($(this).val());
});
достаточно интересно, если я копирую/вставляю результаты ввода из класса и jquery в скрипту, он отлично работает. Я предполагаю, что это вопрос делегации какой-то...
все работает отлично, за исключением того, что я не могу предупредить о пожаре....
Вы правы, это вопрос делегации. Поскольку эти элементы не существуют в DOM во время рендеринга. Событие не будет прикреплено должным образом. Вам необходимо прикрепить событие к элементу, который уже существует (например, элемент body), а затем использовать делегат обработчика для ваших входов с классом заполнения. Попробуй это:
$( "body" ).on( "change", ".fill", function() {
alert( 'test');
});
Надеюсь, это поможет! Вам нужно будет поместить этот код в обработчик документа.