Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

drupal > views > exposed filter > submit on change

I've got a view with a single exposed filter (a select). It's using ajax to re-populate when the user clicks "Apply". I'd like them not to have to click that and just re-populate when the select is changed. I'm assuming I'm going to need some JS more or less like this (though this doesn't quite seem to be working):

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

First, I would think that would do it, but it's not getting submitted. Anyone know why?

Second, what's the best way to inject that code? I'm thinking of using the View footer because it's easy, but any other better ideas?

UPDATE: The above code is working (injected via the views footer), but only the first time. I guess the select is getting overwritten by the ajax call, but the behavior isn't getting reattached (or something). Hmm...

UPDATE #2: For simplicity's sake, I'm gonna ditch the ajax.

like image 249
sprugman Avatar asked Sep 28 '09 19:09

sprugman


People also ask

Which is used for handling filtering of content in Drupal?

The Content Management Filter is a contributed module that adds an easier way for administrators to filter the content on a Drupal site for administration purposes.

What is exposed filter in Drupal 8?

Overview: Exposed Filter Criteria in Views for Drupal 8, Drupal 9. Exposing filter criteria allows the users of your site to choose how to filter a content list created in Views. When rendered on the page, the exposed filters will be displayed to the user as interactive form components.

What is Drupal filter?

The Filter core module allows you to configure text formats for processing text input for your site. These settings are under Configuration > Content authoring > "Text formats and editors" ( /admin/config/content/formats ).


3 Answers

In order to have this code re-attached after the ajax call, it should initially be attached via Drupal.behaviors. Something like this:

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

Note that the context argument is passed into the selector. Drupal.behaviors should get called again on the new content loaded via ajax.

Update: I didn't notice you were inserting the js via the views footer. The above should still work, just replace 'myCustomModule' with some unique identifier so you don't override other behaviors.

like image 64
jhedstrom Avatar answered Oct 29 '22 17:10

jhedstrom


I think this feature works out of the box (at least in Drupal 7). Edit your view and under Exposed form choose

Exposed form style -> Settings

Then there is an option

Autosubmit

where you can choose if you want to "Automatically submit the form once an element is changed". There is also the possibility to use the option

Hide submit button

which is explained by "Hide submit button if javascript is enabled".

like image 34
lumbric Avatar answered Oct 29 '22 17:10

lumbric


@pradeep: you could insert it into a themed view template (see http://www.group42.ca/theming_views_2_the_basics) of your view. (sorry, could not write this as comment according to the forum ui)

like image 1
spikey Avatar answered Oct 29 '22 19:10

spikey