我正在调用一个简单的javascript函数 onchange
echo $form->dropDownList($model, 'job_title', $jobTypes, array('onchange'=>'jobTitle(this);')); ?>
Run Code Online (Sandbox Code Playgroud)
试图注册jobTitle通过clientScript->registerScript
Yii::app()->clientScript->registerScript('jobTitle', "
function jobTitle(e) {
alert('e');
}
");
Run Code Online (Sandbox Code Playgroud)
然而,我收到一个jobTitle未定义的错误......
boo*_*dev 13
原因:
作为默认位置是CClientScript::POS_READY,所产生的JS是:
jQuery(function($) {
// ... there could be some other yii scriptlets too ...
function jobTitle(e) {
alert('e');
}
});
Run Code Online (Sandbox Code Playgroud)
这意味着您的功能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);
Run Code Online (Sandbox Code Playgroud)
该函数将在外部定义,并在全局范围内定义,然后您就可以使用该函数.
解决方案2:
或者,如果您需要内部功能ready(),即内部功能jQuery(function($){});,您可以在全局窗口对象中定义该功能,并仍然可以从外部访问它:
Yii::app()->clientScript->registerScript('jobTitle', "
window.jobTitle = function jobTitle(e) {
alert('e');
}
");
Run Code Online (Sandbox Code Playgroud)
解决方案3:
或者你可以简单地从jQuery本身添加一个事件处理程序,而不是在html中内联它:
Yii::app()->clientScript->registerScript('jobTitle', "
$('body').on('change', 'id-of-job-title-input', function(e){
console.log(e);
});
");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3113 次 |
| 最近记录: |