поля, созданные классом, не перехватываются слушателем jquery и событие не запускается

0

У меня есть форма, созданная путем цикла через массив:

  $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 в скрипту, он отлично работает. Я предполагаю, что это вопрос делегации какой-то...

все работает отлично, за исключением того, что я не могу предупредить о пожаре....

  • 2
    Вы включили jQuery и запомнили функцию document.ready
  • 0
    Я помню оба раза:) (
Показать ещё 8 комментариев
Теги:
forms
listener

1 ответ

1
Лучший ответ

Вы правы, это вопрос делегации. Поскольку эти элементы не существуют в DOM во время рендеринга. Событие не будет прикреплено должным образом. Вам необходимо прикрепить событие к элементу, который уже существует (например, элемент body), а затем использовать делегат обработчика для ваших входов с классом заполнения. Попробуй это:

$( "body" ).on( "change", ".fill", function() {
    alert( 'test');
 });

Надеюсь, это поможет! Вам нужно будет поместить этот код в обработчик документа.

  • 0
    Без изменений MDiesel.
  • 0
    опечатка, это правильный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню