我试图通过文件名的afterAjaxUpdate参数调用另一个js文件中定义的函数但是我在控制台中得到错误,函数未定义
<?php
$dataProvider=new CActiveDataProvider('profiles',array('pagination'=>array('pageSize'=>3))); ?>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_profilesview',
'template'=>'{sorter}<br />{pager}{items}{pager}',
'enableSorting' => true,
'sortableAttributes'=>array(
'name'=>'By firstName',
'location'=>'By city',
'age'=>'By age',
'likes'=>'By likes'
),
'afterAjaxUpdate'=>'readcookie()',
));
?>
我的js功能是
$(document).ready(function(){
function readcookie()
{
alert("hi");
}
});
我可以在我的源代码中看到文件中定义的函数包含在yii默认包含的所有js文件之后 当我在我的布局中注册我的脚本时,它会找到$因为当我包含jquery时它不包括jquery它会被包含两次导致触发我的事件 我也尝试通过设置
的RenderPartial( 'Mybelowview',NULL,FALSE,TRUE)
这导致我的js文件再次包含多次,我的事件gots会多次触发。
这非常令人困惑,请帮助摆脱它 感谢所有人如此慷慨
答案 0 :(得分:3)
问题是$(document).ready();
内的函数超出了它的范围,这就是你得到 undefined 的原因。所以你可以拥有:
// $(document).ready(function(){
function readcookie()
{
alert("hi");
}
// });
// omit document.ready to make function available in the global scope
或在窗口对象上定义函数以使其成为全局:
$(document).ready(function(){
window.readcookie=function ()
{
alert("hi");
};
});
最后将属性'afterAjaxUpdate'
定义为:
'afterAjaxUpdate'=>'readcookie'
// if it is readcookie() it becomes a function call instead