2013-05-08 13 views
9

Mam listę rozwijaną, ale gdy użytkownik wybierze inną wartość, chcę, aby jakiś kod został wykonany. Moje pytanie: Jak mogę sprawdzić, czy wybrana wartość menu zmieniła się?Meteor - aktualizacja var przy wybranej zmianie

W moim pliku html:

<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> 

w moim pliku javascript:

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

Odpowiedz

20

można uzyskać wartości wybranych elementów wewnątrz obsługi zdarzeń, a następnie porównać go do starego wartość, już zapisane:

"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

Początkowy problemem było to, Bootstrap selectpicker (https://github.com/silviomoreto/bootstrap-select) łamie obsługi zdarzeń, tak że meteor nie poznaje, że dane zostały zmienione :(. –

+2

Możesz po prostu: 'console.log (e.target.value);' bez używania jQuery. –

+1

'console.log (e.target.value);' nie zadziała, ponieważ select nie ma wartości. Wybrał opcje jako dzieci i mają wartości. Musisz użyć 'currentTarget.options [currentTarget.selectedIndex] .value'. –

2

rozwiązanie z czystym JavaScript byłoby:

'change #yearpicker': function (event) { 
    var currentTarget = event.currentTarget; 
    var newValue = currentTarget.options[currentTarget.selectedIndex].value; 
    if(!Session.equals('year_id', newValue)){ 
    Session.set('year_id', newValue); 
    } 
} 
Powiązane problemy