2015-10-23 10 views
5

Ho applicato un dataPeriodPicker a un input nella riga del filtro di griglia di Yii2. Funziona ma non si applica subito dopo aver inserito il valore. Devi fare nuovamente clic sull'input e premere Invio. Altri campi funzionano bene. C'è un modo in cui posso applicarlo come altri input, subito dopo il cambiamento?Yii2 filtraggio griglia con dataRangePicker non si applica al cambio di input

Ecco lo script che ho usato:

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

Ecco il RequestSearch.php. dateRangePicker inserisce valori come "2015-01-05/2015-05-09" quindi ho dovuto creare un gestore che divide il valore in $ start_date e $ 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

Mostrami regole() funzione del RequestSearch classe può essere 'request_date' non è massicciamente assegnato in esso –

+0

Penso che questo sia il comportamento previsto. Se il tuo filtro è una casella di testo, il modulo non verrà inviato finché non lo invierai effettivamente premendo Invio. Perché questo input personalizzato dovrebbe essere diverso? Prova ad associare un gestore con 'form.submit()' all'evento 'onChange' del tuo input' datePeriodPicker'. – Beowulfenator

+0

@Beowulfenator ma altri filtri di campi di testo vengono applicati subito dopo aver modificato il loro input. Colpendo inserisci il nostro cursore di selezione. . – Marat

risposta

2

Sembra che il plugin datepicker ho usato inserito il valore di ingresso utilizzando val() o qualcosa di simile che non Trigger Event 'cambiamento' che è necessario per una corretta filtrazione GridView. Aggiunto .trigger ('change') per l'input e ora funziona tutto bene. Con il plugin che uso qui è lo script che sta lavorando:

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