2015-10-23 7 views
5

Zastosowałem datePeriodPicker do danych wejściowych w wierszu filtrowania grid grid Yii2. Działa, ale nie działa zaraz po wstawieniu wartości. Musisz ponownie kliknąć wejście i nacisnąć Enter. Inne pola działają dobrze. Czy istnieje sposób, w jaki mogę go zastosować tak samo jak inne dane wejściowe, zaraz po zmianie?Filtrowanie gridview Yii2 z atrybutem dateRangePicker nie będzie stosowane przy zmianie wejścia

Oto skrypt użyłem:

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); 

EDIT 1

Oto RequestSearch.php. dateRangePicker wstawia wartości takie jak "2015-01-05/2015-05-09", więc musiałem utworzyć program obsługi dzielący wartość na $ start_date i $ 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,]); 
    } 
+1

Pokaż mi zasady() funkcja RequestSearch klasy mogą być 'request_date' nie jest masowo przypisane w nim –

+0

myślę, że to oczekiwane zachowanie. Jeśli Twój filtr jest polem tekstowym, formularz nie zostanie przesłany, dopóki go nie przesyłasz, naciskając klawisz Enter. Dlaczego ten niestandardowy sygnał wejściowy powinien być inny? Spróbuj dołączyć program obsługi z 'form.submit()' do zdarzenia 'onChange' swojego wejścia' datePeriodPicker'. – Beowulfenator

+0

@ Heowulfenator, ale inne filtry pola tekstowego są stosowane zaraz po zmianie ich danych wejściowych. Uderzając, wyjdź z naszego kursora myszy. . – Marat

Odpowiedz

2

Wygląda na wtyczce datepicker użyłem włożonej wartość wejścia przy użyciu val() lub coś takiego, że nie powoduje zmian „” zdarzenie, które jest potrzebne do prawidłowego filtrowania gridview. Dodano .trigger ("change") dla wejścia i teraz wszystko działa dobrze. Z wtyczką używam tutaj jest skrypt, który działa:

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