Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii:如何将JMultiSelect小部件的选定值发送到控制器_Yii_Controller_Widget_Multi Select_Ajax Request - Fatal编程技术网

Yii:如何将JMultiSelect小部件的选定值发送到控制器

Yii:如何将JMultiSelect小部件的选定值发送到控制器,yii,controller,widget,multi-select,ajax-request,Yii,Controller,Widget,Multi Select,Ajax Request,我使用了一个小部件JMultiSelect,我希望当我按下ajax按钮(ajax请求)时,我选择的值将被发送到控制器。我希望该值将添加到我请求的“数据”中 这是我的小部件: $this->beginWidget('CActiveForm', array( 'id' => 'Music' )); $this->widget('ext.multiselect.JMultiSelect', array ( 'id'=>'MusicName', '

我使用了一个小部件JMultiSelect,我希望当我按下ajax按钮(ajax请求)时,我选择的值将被发送到控制器。我希望该值将添加到我请求的“数据”中

这是我的小部件:

$this->beginWidget('CActiveForm', array(
     'id' => 'Music'
));

$this->widget('ext.multiselect.JMultiSelect', array (
     'id'=>'MusicName',
     'name'=>'Music',
     'data' => $music,
     'options'=> array('header'=>'Select a music file', 'noneSelectedText'=>'Select a music file', 'multiple'=>false),
));

$this->endWidget();
我试过这样的方法:

echo CHtml::ajaxLink(
      'Test request',
      array('video/createVideo'),
      array(  
         'update'=>'#req_res',
         'data'=> array(
                      'musicFile'=>'js:function(){
                            return document.getElementById("Music").value;
                       }',
          ),                                                    
         'type' => 'post',
      )
);
找到了解决方案,但现在我有了值而不是文本:

'musicFile'=>'js:function(){
                                                                    return $("#MusicName").multiselect("getChecked").map(function(){
                                                                    return this.value;    
                                                                }).get();
                                                            }',

尝试在ajax的数据部分直接使用Js函数

$this->widget('ext.multiselect.JMultiSelect', array (
                                            'name'=>'Music',
                                            'data' =>array( 
                                            "urVariableName" = "js: $('#music').val();"
                                           ),
                                            'options'=> array('header'=>'Select a music file', 'noneSelectedText'=>'Select a music file', 'multiple'=>false),
                                    ));
要在控制器u上获取数据,请使用POST或获取,如图所示

$variable=$_POST['urVariableName'];
尝试使用Ajax按钮,如图所示

echo CHtml::ajaxButton(
      'Test request',
      array('video/createVideo'),
      array(  
         'update'=>'#req_res',
         'data'=> array(
                      'musicFile'=>"js: $('#music').val();"
                      }',
          ),                                                    
         'type' => 'post',
      )
);

尝试在JMultiSelect中使用“select”属性,如图所示

$this->widget('ext.multiselect.JMultiSelect', array (
     'name'=>'Music',
     'data' => $music,
     'select'=>'js:function( event, ui ) {
                                            // $("#my_keyword_id").val(ui.item.id);
                                             alert($("#music").val());
                                                }',
     'options'=> array('header'=>'Select a music file', 'noneSelectedText'=>'Select a music file', 'multiple'=>false),
));

此时将填充“多选”下拉列表。但是,当我使用u ajax请求发送页面上的所有数据时,我不知道如何获取发送到控制器的值。小部件中的数据将填充字符串(或$music中的音乐文件名)。我希望发送从该列表中选择的。我将更新我的第二个代码部分是的,我想知道选择了什么选项,并将其发送给controllerI,我为其找到了解决方案。我只得到所选的值而不是文本。我添加了另一个答案,希望它能在其他情况下帮助你