2013-05-08 2 views
9

Ich habe ein Dropdown, aber wenn ein Benutzer einen anderen Wert auswählt, möchte ich etwas Code ausgeführt werden. Meine Frage: Wie kann ich prüfen, ob sich der ausgewählte Wert des Dropdowns geändert hat?Meteor - Update var bei Auswahl ändern

In meiner html-Datei:

<template name="jaren">  
    <form id="yearFilter"> 
     <select class="selectpicker span2" id="yearpicker" > 
      {{#each jaren}} 
       {{#if selectedYear}} 
       <option selected value="{{_id}}">{{jaar}} {{description}}</option> 
       {{else}} 
       <option value="{{_id}}">{{jaar}} {{description}}</option> 
       {{/if}} 
      {{/each}} 
     </select> 
    </form> 
</template> 

in meiner Javascript-Datei:

Template.jaren.jaren = function() { 
    return Years.find(); 
} 
Template.jaren.selectedYear = function() { 
    if (Session.get('year_id') == this._id) { 
    return true; 
    } else { 
    return false; 
    } 
} 
Template.jaren.events({ 
    'change form#yearFilter #yearpicker': function(event, template) { 
    Session.set('year_id', template.find('#yearpicker').value); 
    console.log("value changed"); 
    } 
}); 

Antwort

20

Sie können den Wert des ausgewählten Elements innerhalb der Event-Handler bekommen und es dann auf den alten Wert, den Sie vergleichen hatte bereits gespeichert:

"change #yearpicker": function(evt) { 
    var newValue = $(evt.target).val(); 
    var oldValue = Session.get("year_id"); 
    if (newValue != oldValue) { 
    // value changed, let's do something 
    } 
    Session.set("year_id", newValue); 
} 
+0

Das anfängliche Problem war, dass Bootstrap selectpicker (https://github.com/silviomoreto/bootstrap-select) bricht den Event-Handler, so dass Meteor nie erfährt, dass die Daten geändert wurden :(. –

+2

Sie können einfach: 'console.log (e.target.value);' ohne jQuery verwenden. –

+1

'console.log (e.target.value);' wird nicht funktionieren, da select keinen Wert hat. Es hat Optionen als Kinder ausgewählt und sie haben Werte. Sie müssen 'currentTarget.options [currentTarget.selectedIndex] .value' verwenden. –

2

Eine Lösung mit reinem JavaScript wäre: