【问题标题】:YII2 Gridview doesn't return selected rows (Uncaught TypeError: Cannot read property 'selectionColumn' of undefined yii.gridView.js:140)YII2 Gridview 不返回选定的行(未捕获的类型错误:无法读取未定义的 yii.gridView.js:140 的属性“selectionColumn”)
【发布时间】: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] 是什么?

标签: yii2 yii2-advanced-app yii2-user


【解决方案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);
          });
      }); 
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。不鼓励仅使用代码回答。
      猜你喜欢
      • 1970-01-01
      • 2015-01-06
      • 2017-07-26
      • 2021-12-22
      • 2019-02-26
      • 2016-04-28
      • 2021-12-25
      相关资源
      最近更新 更多