2015-03-12 18 views
8

Przy użyciu skryptu Selectize.js próbuję zainicjować dynamicznie wstępnie wybrać jedną pozycję z listy bez wywoływania zdarzenia onItemAdd. W poniższym kodzie, zdarzenie jest wyzwalany nawet jeśli parametr silent jest truthy:Selectize.js: Zdarzenie onItemAdd wyzwalane po cichym dodaniu pozycji

$(function() { 
    $('select').selectize({ 
     onItemAdd: function() { 
      alert("Add item"); 
     } 
    }); 
    // this triggers an the event 
    $('select')[0].selectize.addItem('2', true); 
}); 

JSFiddle: http://jsfiddle.net/zuzat0dc/1/

Zgodnie z dokumentacją:

  • addItem(value, silent): "wybierze opcję" element. Dodaje go do listy w aktualnej pozycji karetki. Jeśli "cichy" jest zgodny z prawdą, żadne zdarzenie zmiany nie zostanie uruchomione na oryginalnym wejściu.

Każdy pomysł, jak uniknąć wyzwalania zdarzenia onItemAdd? Czy parametr silent zadziałał, czy też powinienem użyć zdarzenia change?

+1

Uwaga: Można używać 'off (...)' 'i na (...)' funkcji wyłączyć obsługi, dodać element następnie ponownie włącza się do obsługi, ale to nie wygląda tak, jak powinno się to odbywać =/ –

+0

Co robisz? .wyłączyć i włączyć()? Oryginalny wybór? – temuri

+0

Jestem dość pewny, że to były metody zdarzeń '.on()' i '.off()' z [selectize instance] (https://github.com/selectize/selectize.js/blob/master/docs /api.md#methods_events) –

Odpowiedz

1

Cichy parametr w addItem(value, silent) wpływa tylko na to, czy zdarzenie change czy nie. Nie można uniknąć zdarzenia item_add z silent = true.

+0

I tak nie ma sposobu na uniknięcie zdarzenia 'item_add', które ma być uruchomione, poza używaniem' off (...) 'before i' on (...) 'po ręcznym dodaniu pozycja? –

+0

W rzeczywistości nie jest to prawdą, mimo to zdarzenie 'change' jest zwalniane. Łącznik JSFiddle powiązany w początkowym pytaniu został zaktualizowany, aby to pokazać. –

+3

To błąd w wersji 0.12.0. Wypróbuj tę próbkę http://jsfiddle.net/6zyums3d/1/ z wersją 0.12.1. – alemv

6

szybkie ustalenie, że pracował dla mnie było zachowanie flagę państwową i odwoływać się do niego w obsługi zdarzeń ...

$(function() { 

    var initialising = true; 

    $('select').selectize({ 
    onItemAdd: function() { 
     if(!initialising) { 
     alert("Add item"); 
     } 
    } 
    }); 

    // this triggers an the event 
    $('select')[0].selectize.addItem('2', true); 

    initialising = false; 
}); 
+0

Tak, to jest "akceptowalne" rozwiązanie, chociaż jest to coś w rodzaju _hacky _... :-p –

0

Jedyną rzeczą, która pracowała dla mnie było przechowywać item_add zdarzenia lokalnie, usunąć to z selectize instancji i ustawić ją z powrotem po dodaniu urządzenia:

onItemAdd: function(val) { 
    var e = this._events['item_add']; 
    delete this._events['item_add']; 
    this.addItem(123); 
    this._events['item_add'] = e; 
} 
Powiązane problemy