Yii2:Select2 不使用 jQuery 向控制器发送值

Posted

技术标签:

【中文标题】Yii2:Select2 不使用 jQuery 向控制器发送值【英文标题】:Yii2: Select2 doesn't send value to controller using jQuery 【发布时间】:2019-05-07 04:40:50 【问题描述】:

我正在使用 Select2 小部件:

<?php echo $form->field($model, 'id_person')->widget(
    \common\widgets\Select2::classname(),
    [
        'items' => \yii\helpers\ArrayHelper::map(\app\models\Persons::find()->all(), 'id_person', 'name_person'),
        'placeholder' => '',
        'class' => 'form-control',
        'options' => [
            'id' => 'idPerson' // For jQuery.
        ]
    ]
)
?>

然后我使用 jQuery 禁用它并在我阅读 in this *** question 时设置一个值:

function($)     
    $("#idPerson").prop("disabled", true)
        .select2('data', id: 1, a_key: 'John');
);

它正确禁用了 Select2,但 该值未设置,因此控制器未收到该值

【问题讨论】:

【参考方案1】:

将不会提交禁用的输入。 检查这个:values of disabled inputs will not be submitted?。 也许您可以使用“只读”而不是禁用输入:http://demos.krajee.com/widget-details/select2#settings

【讨论】:

【参考方案2】:

如果您使用的是kartik-v\select2 小部件,那么您需要知道它使用的是插件select2 的Version 4.0

对于版本,&gt;=4.0 变得更简单,您需要使用.val() 将选项设置为选择并使用.trigger() 实际使选项更改可见,您需要查看可以触发的两件事changechange.select2

change 触发所有附加的更改事件,包括 select2。 change.select2 仅触发 select2 change 事件。

您需要将代码中的行更改为以下内容

$("#idPerson").val(1).trigger('change');

有关How to Add, Select or Clear 的更详细示例,请参见此处。

【讨论】:

以上是关于Yii2:Select2 不使用 jQuery 向控制器发送值的主要内容,如果未能解决你的问题,请参考以下文章

select2 和 Pjax 在 yii2 中不能一起工作

Yii2 select2 数据库异常绑定变量数与令牌数不匹配

不加载kartik 的select2 作为GridView 中的过滤器。 Yii2

如何从 Select2 Widget Yii2 将多个值保存到数据库

Yii2- Select2 按钮作为网格视图过滤器不过滤

如何用 jquery I 制作 select2