【问题标题】:Yii2 gridview filtering with dateRangePicker won't apply on input change带有 dateRangePicker 的 Yii2 gridview 过滤不适用于输入更改
【发布时间】:2015-10-23 05:22:15
【问题描述】:

我已将 datePeriodPicker 应用于 Yii2 gridview 过滤器行中的输入。它有效,但在插入值后不适用。您必须再次单击输入并按 Enter。其他领域工作正常。有什么办法可以让它像其他输入一样在更改后立即应用?

这是我使用的脚本:

var 
    dateInput = $("[name='RequestSearch[request_date]']" ),
    configObject = {
        autoClose: true,
        language:'ru',
        separator: '/',
        showShortcuts : true,
        shortcuts: {
            'next-days': [3,5,7],
            'next': ['week','month','year']
        },
        startOfWeek: 'monday',
    };

dateInput.dateRangePicker(configObject);

编辑 1

这里是 RequestSearch.php。 dateRangePicker 插入像“2015-01-05/2015-05-09”这样的值,所以我必须创建一个处理程序,将值分成 $start_date 和 $end_date。

    public function rules()
    {
        return [
            [['id', 'KP_id', 'minimal_payment', 'mover_company_id', 'manager_id', 'workers_number', 'workhours', 'payment_additional', 'payment_car', 'payment_sum'], 'integer'],
            [['request_date', 'payment_type', 'request', 'request_time', 'quantity', 'request_type', 'address', 'status', 'customer_id', 'comment',], 'safe'],
        ];
    }

 $query->andFilterWhere([
        'id' => $this->id,
        ...

    ]);

    if ( ! is_null($this->request_date) && strpos($this->request_date, '/') !== false ) { 
        list($start_date, $end_date) = explode('/', $this->request_date);
        $query->andFilterWhere(['between', 'request_date', $start_date, $end_date]);
        $this->request_date = null;
    } else {
        $query->andFilterWhere(['request_date' => $this->request_date,]);
    }

【问题讨论】:

  • RequestSearch类的Show me rules()函数可能是request_date在里面没有大量赋值
  • 我认为这是预期的行为。如果您的过滤器是一个文本框,则在您按回车键实际提交之前不会提交表单。为什么这个自定义输入会有所不同?尝试将带有form.submit() 的处理程序附加到datePeriodPicker 输入的onChange 事件。
  • @Beowulfenator 但其他文本字段过滤器在更改其输入后立即应用。点击进入我们的点击光标。 .
  • 对不起,你是对的,他们确实如此。然后我猜你的日期字段的 change 事件有正确的句柄,但由于你的日期选择器有问题而没有被解雇。
  • @Beowulfenator 我找到了解决方案:)

标签: gridview yii2


【解决方案1】:

看起来我使用的 datepicker 插件使用 val() 或类似的东西插入了输入值,它不会触发正确的 gridview 过滤所需的“更改”事件。为输入添加了 .trigger('change') ,现在一切正常。使用我使用的插件,这是工作的脚本:

var dateInput = $("[name='RequestSearch[request_date]']");
dateInput.dateRangePicker();
dateInput.bind('datepicker-closed', function(){
    dateInput.trigger('change');
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多