Yii - jQuery在renderPartial之后无法正常工作

Ana*_*ath 5 jquery renderpartial yii

我知道这个问题已被多次询问,无论是在这里还是在Yii网站上,但即使在完成每个解决方案之后我也无法获得解决方案.我确信我做的事情从根本上是错误的.所以如果你还在读这个 - 这里什么都没有,

我有一个页面,其中加载了CheckBoxList小部件.它有一个change()jQuery函数调用,刷新一个完美运行的CGridView.我还有一个与checkBoxList中具有click事件的每个项相关的span.

此单击事件依次调用"部分呈现"视图的控制器 -

Yii::app()->clientscript->scriptMap['jquery.js'] = false;


$this->widget('ext.xxx.EModelWidget', array(
'name' => $widget_name,
'manufacturer_id' => $manufacturer_id,
    )
);
Run Code Online (Sandbox Code Playgroud)

并且相应的窗口小部件代码在从db获取$ data之后打印CheckBoxList.

echo CHtml::checkBoxList($this->name, array(), $data, array(
        'class' => 'modelFilter',
        'separator' => '',
        'template' => '<div>{input} {label}</div>',
        'id' => 'dummyID',
    ));
Run Code Online (Sandbox Code Playgroud)

如您所见,我已将每个将呈现为复选框的元素的类名设置为modelFilter

现在我在主视图文件中有一个脚本,只需在单击类modelFilter的checkBox时显示一个警告框.

Yii::app()->clientScript->registerScript('model-selected', "
$('input.modelFilter').change(function(){
  alert('Hellpo!');
  });
");
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这种情况从未发生过.

我在所有论坛中阅读的两个常见解决方案是

a)Yii :: app() - > clientscript-> scriptMap ['jquery.js'] = false; 你可以看到我已经适时跟随.

b)renderPartial的$ result和$ processOutput参数分别为false和true.,这也是我所遵循的.

所以我的问题是我应该怎么做才能获得通过Ajax工作加载的内容的更改功能,在Yii!

mar*_*out 7

如果我理解正确,您$('input.modelFilter').change()在加载复选框列表之前调用.像这样使用事件处理程序将不会绑定到调用后插入的任何元素.

您必须使用委派事件而不是直接绑定事件.请查看:http://api.jquery.com/on/(搜索"直接和委派活动")

$("body_or_input_container").on("change", "input.modelFilter", function(e){
    //callback
});
Run Code Online (Sandbox Code Playgroud)