理由:
デフォルトの位置はですので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:解決策2:
ready()
または、内、つまり内で関数が必要な場合jQuery(function($){});
は、グローバルウィンドウオブジェクトで関数を定義し、外部からアクセスすることもできます。
Yii::app()->clientScript->registerScript('jobTitle', "
window.jobTitle = function jobTitle(e) {
alert('e');
}
");
解決策3:
または、htmlでインラインで行う代わりに、jQuery自体からイベントハンドラーを追加することもできます。
Yii::app()->clientScript->registerScript('jobTitle', "
$('body').on('change', 'id-of-job-title-input', function(e){
console.log(e);
});
");