我通过onchange
echo $form->dropDownList($model, 'job_title', $jobTypes, array('onchange'=>'jobTitle(this);')); ?>
尝试通过jobTitle
clientScript->registerScript
Yii::app()->clientScript->registerScript('jobTitle', "
function jobTitle(e) {
alert('e');
}
");
然而,我收到的错误是jobTitle
未定义...
答案 0 :(得分:13)
原因:
由于default position为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
或CClientScript::POS_END
与您的registerScript
电话合作,即:
Yii::app()->clientScript->registerScript('jobTitle', "
function jobTitle(e) {
alert('e');
}
", CClientScript::POS_END);
该函数将在外部定义,并在全局范围内定义,然后您就可以使用该函数。
解决方案2:
或者,如果您需要ready()
内的函数,即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);
});
");