2014-02-25 50 views
0

我具有由通过阵列循环创建的形式:字段不被jquery的侦听器和事件不触发捕获

$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'> 

我有一个侦听change事件

$('.fill').on('change', function(){ 
      alert($(this).val()); 
    }); 

我也曾尝试

$('.fill').blur(function(){ 
      alert($(this).val()); 
    }); 

$('.fill').change(function(){ 
      alert($(this).val()); 
    }); 

有趣的是jQuery的听众,如果我复制/粘贴类和jQuery的输入行结果成小提琴它工作正常。即时猜测那里有某种形式的委派问题...

一切都很正常,除了我不能得到警报火....

+2

您是否包含jQuery并记住document.ready函数 – adeneo

+0

我确实还记得这两次:)( – bart2puck

+0

您是否在绑定之前创建表单? – fasouto

回答

1

你是正确的,这是一个委派问题。由于这些元素在渲染时不存在于DOM中。该事件将无法正确连接。您需要将事件附加到已存在的元素(例如body元素),然后使用代理处理程序将您的输入与填充类相关联。试试这个:

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

我希望这有助于!您将希望将该代码放入文档就绪处理程序中。

+0

没有改变MDiesel。 – bart2puck

+0

错字,这是正确的答案。 – bart2puck

相关问题