2009-09-28 22 views
9

Tengo una vista con un solo filtro expuesto (una selección). Está utilizando ajax para volver a poblar cuando el usuario haga clic en "Aplicar". Me gustaría que no tengan que hacer clic en eso y simplemente volver a llenar cuando se cambie la selección. Estoy asumiendo que voy a necesitar algo de JS más o menos así (aunque esto no parece estar funcionando bastante a):drupal> vistas> filtro expuesto> enviar al cambiar

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

En primer lugar, yo creo que lo haría, pero no es siendo enviado. Alguien sabe por qué?

En segundo lugar, ¿cuál es la mejor manera de insertar ese código? Estoy pensando en usar el pie de página de View porque es fácil, pero ¿hay alguna otra mejor idea?

ACTUALIZACIÓN: El código anterior funciona (inyectado a través del pie de página de vistas), pero solo la primera vez. Supongo que la selección se sobrescribe con la llamada ajax, pero el comportamiento no se vuelve a conectar (o algo así). Hmm ...

ACTUALIZACIÓN # 2: Para simplificar, voy a deshacerme del ajax.

Respuesta

10

Para volver a adjuntar este código después de la llamada ajax, inicialmente debe adjuntarse a través de Drupal.behaviors. Algo como esto:

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

Tenga en cuenta que el argumento de contexto se pasa al selector. Drupal.behaviors debe ser llamado de nuevo en el nuevo contenido cargado a través de ajax.

Actualización: No noté que estaba insertando el js a través del pie de página de las vistas. Lo anterior aún debería funcionar, simplemente reemplace 'myCustomModule' con algún identificador único para que no anule otros comportamientos.

+0

- ¿Me puede decir dónde debo escribir esta función? – Hacker

5

Creo que esta característica funciona de la caja (al menos en Drupal 7). Editar su punto de vista y bajo forma expuesta elegir

Exposed form style -> Settings 

Entonces hay una opción

Autosubmit 

donde se puede elegir si quiere "Enviar automáticamente el formulario una vez se cambia un elemento". También existe la posibilidad de utilizar la opción

Hide submit button 

que se explica por "Ocultar botón de enviar si Javascript está habilitado".

0

Si necesita AJAX para trabajar cuando se cambia una opción de selección en la vista expuestos

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

};

Cuestiones relacionadas