YII2 Gridview 不返回选定的行(未捕获的类型错误:无法读取未定义的 yii.gridView.js:140 的属性“selectionColumn”)

Posted

技术标签:

【中文标题】YII2 Gridview 不返回选定的行(未捕获的类型错误:无法读取未定义的 yii.gridView.js:140 的属性“selectionColumn”)【英文标题】:YII2 Gridview doesn't return selected rows (Uncaught TypeError: Cannot read property 'selectionColumn' of undefined yii.gridView.js:140) 【发布时间】:2015-02-26 17:47:35 【问题描述】:

我正在使用从 gridview 中选择的键传递(通过 post)一个数组,但我总是得到相同的 URL 错误:

POST http://localhost/cngrx/web/index.php/ponenciaresumen/[object%20Object] 404 (Not Found) 

似乎代码总是采用这种模式:path/myController/[object%20Object] 我设置的 url 无关紧要,代码generete 总是相同的 url,它不是我需要的。我的代码是这样的:

<script>
  $(document).ready(function()
    $('#MyButton').click(function()

       var keys = $('#w1').yiiGridView('getSelectedRows');
        $.post(
           url: 'myController/myAction', 
           dataType: 'json',
           data: keylist: keys

        );
    );
  );
</script>

我已经尝试过绝对网址和亲戚之一,但没有。怎么可能??

这是我在 myController 中的操作:

 public function actionMyAction(    ) 
    if (isset($_POST['keylist'])) 
        $keys = \yii\helpers\Json::decode($_POST['keylist']);

        // you will have the array of pk ids to process in $keys
        // perform batch action on these keys and return status
        // back to ajax call above
    

感谢您的提前!

【问题讨论】:

什么是ponenciaresumen? [object%20Object] 是什么? 【参考方案1】:

见http://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html

需要Class yii\grid\CheckboxColumn

var keys = $('#grid').yiiGridView('getSelectedRows');

【讨论】:

【参考方案2】:

我认为当您将网格放入 pjax 容器时会发生这种情况?

如果你不使用 Pjax,你应该使用元素 id #w1 而不是 #grid。

Yii2 渲染这个脚本

jQuery(文档).ready(函数() jQuery('#modal-upload').modal("show":false); jQuery('#w0').yiiGridView("filterUrl":"/advanced/backend/web/index.php?r=state%2Findex","filterSelector":"#w0-filters input, #w0-filters select "); jQuery('#w1').yiiGridView("filterUrl":"/advanced/backend/web/index.php?r=state%2Findex","filterSelector":"#w1-filters input, #w1-filters select "); jQuery('#w1').yiiGridView('setSelectionColumn', "name":"selection[]","multiple":true,"checkAll":"selection_all"); jQuery('#w2').yiiGridView("filterUrl":"/advanced/backend/web/index.php?r=state%2Findex","filterSelector":"#w2-filters input, #w2-filters select "); );

当我在我的 GridView 上使用 Pjax 时,我没有得到任何值或键 但是当我使用元素 id #w2 而不是 #grid 时,我得到了密钥。

你可以在你的视图上使用它



    $script = '
    jQuery(document).ready(function() 
      btnCheck  = $("#btn-check");
      btnCheck.click(function() 
        var keys = $("#w2").yiiGridView("getSelectedRows");
        alert(keys);
        $.ajax(
            type: "POST",
            url: "'.\yii\helpers\Url::to(['/controller/action']).'", 
            dataType: "json",
            data: keylist: keys
        );
      );
    );';
    $this->registerJs($script, \yii\web\View::POS_END);

【讨论】:

AppAsset.php 上,添加此属性:public $jsOptions = ['position' =&gt; \yii\web\View::POS_HEAD];,这样jQuery 将在页面的开头加载。然后,如果您使用 Pjax,请将选择器更改为 $('.grid-view')【参考方案3】:

查看您的代码源并检查复选框是否有 id "w1" 或 "w0" .. 默认情况下它是 'w0' 并且我能够解决我的问题:

var keys = $('#w0').yiiGridView('getSelectedRows');

【讨论】:

【参考方案4】:
$('#MyButton').click(function() 
    var keys = $('#w0').yiiGridView('getSelectedRows');
    $.post("index.php?r=myController/myAction", keylist: keys, function(result)
        $("span").html(result);
    );
); 

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。不鼓励仅使用代码回答。

以上是关于YII2 Gridview 不返回选定的行(未捕获的类型错误:无法读取未定义的 yii.gridView.js:140 的属性“selectionColumn”)的主要内容,如果未能解决你的问题,请参考以下文章

Yii2:在 GridView 和 DetailView 中删除空值的“(未设置)”

如何使用 JavaScript 或 Jquery 选择 GridView 中选定的行项的子项?

Yii2 GridView CheckboxColumn

YII2 Gridview

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

Yii2的Gridview应用技巧补充