【问题标题】:Why GridView Filters does not work when in modal bootstrap?为什么 GridView 过滤器在模态引导时不起作用?
【发布时间】:2016-09-22 08:19:03
【问题描述】:

我使用模式引导程序来查看 GridView,当我使用过滤器并按 Enter 时,它不起作用,它会影响父窗口按提交/保存按钮。为什么?

这是我的 jquery 函数

$(document).on('ready pjax:success', function() {

   $('#BtnModalPriceList').click(function(e) {
        e.preventDefault();

        $('#modal').modal('show')
            .find('#modalContent')
            .load($(this).attr('value'));
   });

});

这是我在父表单中的模态引导程序

<?= Html::button('Price List', [
    'value' => Url::to('../pricelist/list'), 
    'class' => 'btn btn-primary', 
    'id'    => 'BtnModalPriceList'
]) ?>

<?php 
    Modal::begin([
            'header' => 'Price List',
            'id' => 'modal',
            'size' => 'modal-md',                        
        ]);

    echo "<div id='modalContent'></div>";

    Modal::end();
?>

在动作列表中,我的代码照常

<?php
    $gridColumns = [  
        ['class' => 'yii\grid\CheckboxColumn', 'checkboxOptions' => ['onclick' => 'js:selectItem(this.value, this.checked)']],  
        [
            'attribute' => 'price', 
            'format' => ['decimal', 0],
        ],
        'date',
        [
            'attribute' => 'agen_id',
            'value' => 'agen.agen_name'
        ],        
        'remark_1:ntext',
        'remark_2:ntext',

    ] ?>
    <?php Pjax::begin(); ?> 
    <?=
    GridView::widget([
        'id' => 'kv-grid-pricelist',
        'dataProvider'=>$dataProvider,
        'filterModel'=>$searchModel,
        'columns'=>$gridColumns,        
    ]);
    ?>
<?php Pjax::end(); ?>

我错过了什么?

【问题讨论】:

    标签: jquery gridview yii2


    【解决方案1】:

    因为您是通过 ajax 加载 Pjax(听起来很有趣)。您需要为其分配一个 id。通过 ajax 加载的所有小部件都需要有用户定义的 id,以便 Yii 可以将它们与已经加载的小部件区分开来。

    <?php
    $gridColumns = [  
        ['class' => 'yii\grid\CheckboxColumn', 'checkboxOptions' => ['onclick' => 'js:selectItem(this.value, this.checked)']],  
        [
            'attribute' => 'price', 
            'format' => ['decimal', 0],
        ],
        'date',
        [
            'attribute' => 'agen_id',
            'value' => 'agen.agen_name'
        ],        
        'remark_1:ntext',
        'remark_2:ntext',
    
    ] ?>
    <?php Pjax::begin([
        //add some id here
        'id' => 'your-custom-id'
    ]); ?> 
    <?=
    GridView::widget([
        'id' => 'kv-grid-pricelist',
        'dataProvider'=>$dataProvider,
        'filterModel'=>$searchModel,
        'columns'=>$gridColumns,        
    ]);
    ?>
    

    【讨论】:

    • 并将您的模态框放在表单之外。
    【解决方案2】:

    终于搞定了。感谢 Facebook 中 Yii PHP 框架社区的成员。 答案是 1. 将模态置于活动表单之外。 2.使用Pjax,提供&lt;?php Pjax::begin(['id' =&gt; 'some-id']); ?&gt;等id

    【讨论】:

      【解决方案3】:

      Pjax::begin(['id' => 'stav_id', 'timeout' => false]);

      【讨论】:

        【解决方案4】:

        添加:use yii\bootstrap\Modal;

        你应该阅读thisthis

        【讨论】:

        • 我已经这样做了,可以显示模式,但我无法过滤它。
        猜你喜欢
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        相关资源
        最近更新 更多