原因:
默认位置为,CClientScript::POS_READY
生成的js为:
jQuery(function($) {
// ... there could be some other yii scriptlets too ...
function jobTitle(e) {
alert('e');
}
});
这意味着您的函数jobTitle
仅在jQuery();
函数范围内可用,而不是在函数范围外可用,这就是您收到未定义错误的原因。
解决方案1:
如果您使用职位 :CClientScript::POS_HEAD
或CClientScript::POS_BEGIN
orCClientScript::POS_END
与您的registerScript
电话,即:
Yii::app()->clientScript->registerScript('jobTitle', "
function jobTitle(e) {
alert('e');
}
", CClientScript::POS_END);
该函数将在外部和全局范围内定义,然后您将能够使用该函数。
解决方案2:
或者,如果您需要函数 within ready()
,即 within jQuery(function($){});
,您可以在全局窗口对象中定义该函数,并且仍然可以从外部访问它:
Yii::app()->clientScript->registerScript('jobTitle', "
window.jobTitle = function jobTitle(e) {
alert('e');
}
");
解决方案3:
或者您可以简单地从 jQuery 本身添加一个事件处理程序,而不是在 html 中内联:
Yii::app()->clientScript->registerScript('jobTitle', "
$('body').on('change', 'id-of-job-title-input', function(e){
console.log(e);
});
");