我在Select2中对onChange
事件进行了一些ajax调用。但是,当初始化/打开Select2时,我需要进行类似的调用。
怎么做?
$this->widget('ext.select2.ESelect2', array(
'model'=> $model,
'attribute'=> 'PaymentType',//'open'=>'js:{alert("init");}',
'data' => CHtml::listData(PaymentMethod::model()->findall(), 'id','name'),
'htmlOptions'=>array(
//'onInit'=>'js:{alert("init");}', // this does not work!!
'onChange'=>CHtml::ajax(array('type'=>'GET',
'url'=>$this->createUrl('user/cashlessUser', array ('id'=>Yii::app()->user->id)),
'data'=>'js:{PaymentMethod: this.value }',
'success'=>"js:function(data){ alert(data); }",
)),
),
'options'=> array('allowClear'=>true,
'width' => '250',
'placeholder' => '',
),
));
我在事件here上找到了eSelect2规范
但它适用于纯js,而我需要为Yii插件执行此操作,其中事件(onChange
除外)未正确触发:
'htmlOptions'=>array(
'select2-opening'=> 'js: console.log("smth"); ',
'select2-opening'=> ' console.log("smth"); ',
'select2-opening'=> ' alert("smth"); ',
's2id_Events_PaymentType.open'=> 'js: console.log("open"); ',
'onFocus'=> 'js: console.log("smth"); ',
'onOpen'=> 'js: console.log("smth"); ',
s2id_Events_PaymentType
是此特定电子选择的ID。
所有这些都没有被解雇,但没有发现任何错误。
我试图通过脚本绑定逻辑,但无济于事:
Yii::app()->clientScript->registerScript('some-script', "
jQuery('#s2id_Events_PaymentType').on('select2-open', function(e) { console.log('open'); });
");
答案 0 :(得分:1)
您应该查看docs中的select2事件。
我会使用这两个事件:
更改 - 更改后执行所需的AJAX事件
$el.on("change", function (e) {
$.ajax({...});
});
id - 由于没有select2 create或init事件,我们需要覆盖我们可用的一些公共属性,例如“id”并将我们的AJAX请求放入其中。
$el.select2({
id: function (e) {
// execute AJAX calls on init
$.ajax({...});
return e == undefined ? null : e.id;
}
});
以下是一个小例子:http://jsfiddle.net/dn43uv4c/