2009-09-28 13 views
9

Ho una vista con un singolo filtro esposto (una selezione). Sta usando ajax per ri-popolare quando l'utente fa clic su "Applica". Mi piacerebbe che non dovessero fare clic su questo e semplicemente ri-popolare quando la selezione è cambiata. Sto assumendo che ho intenzione di bisogno di JS più o meno così (anche se questo non abbastanza sembra funzionare):drupal> visualizzazioni> filtro esposto> inoltra in modifica

$('#edit-tid').change(function(){ 
    $('#views-exposed-form-MYVIEW-page-1').submit(); 
}); 

In primo luogo, potrebbe pensare che avrebbe fatto, ma non è essere presentato. Qualcuno sa perché?

In secondo luogo, qual è il modo migliore per iniettare quel codice? Sto pensando di usare il piè di pagina View perché è facile, ma qualche altra idea migliore?

AGGIORNAMENTO: Il codice sopra riportato è funzionante (iniettato tramite il piè di pagina delle visualizzazioni), ma solo la prima volta. Immagino che la selezione venga sovrascritta dalla chiamata ajax, ma il comportamento non viene ricollegato (o qualcosa del genere). Hmm ...

UPDATE # 2: Per l'amor di semplicità, sto per abbandonare l'ajax.

risposta

10

Per poter riapplicare questo codice dopo la chiamata ajax, inizialmente deve essere collegato tramite Drupal.behaviors. Qualcosa del genere:

Drupal.behaviors.myCustomModule = function(context) { 
    $('#edit-tid', context).change(function(){ 
    $('#views-exposed-form-MYVIEW-page-1').submit(); 
    }); 
} 

Si noti che l'argomento di contesto è passato nel selettore. Drupal.behaviors dovrebbe essere chiamato di nuovo sul nuovo contenuto caricato tramite Ajax.

Aggiornamento: Non ho notato che stavi inserendo il js tramite il piè di pagina delle visualizzazioni. Quanto sopra dovrebbe ancora funzionare, basta sostituire 'myCustomModule' con qualche identificatore univoco in modo da non sovrascrivere altri comportamenti.

+0

- puoi dirmi dove dovrei scrivere questa funzione? – Hacker

5

Penso che questa funzione funzioni fuori dalla scatola (almeno in Drupal 7). Modificare la vista e sotto forma Exposed scegliere

Exposed form style -> Settings 

Poi c'è un'opzione

Autosubmit 

dove è possibile scegliere se si vuole "inviare automaticamente il modulo una volta che un elemento è cambiato". V'è anche la possibilità di utilizzare l'opzione

Hide submit button 

che si spiega con "Nascondi pulsante di invio se javascript è abilitato".

0

Se avete bisogno di AJAX a lavorare quando si cambia un selezionare l'opzione nella vista esposto

Drupal.behaviors.myCustomModule = { 
attach: function (context, settings) { 
    $('select[data-drupal-selector="edit-YOUR-FIELD"]', context).change(function(){ 
     $('#views-exposed-form-YOUR-VIEW-block-1 input.form-submit').trigger('click'); 
    }); 
} 

};

Problemi correlati