2015-03-12 18 views
8

Selectize.js'yi kullanarak, listenin öğesinden birini onItemAdd olayını tetiklemeden dinamik olarak ön seçimini başlatmaya çalışıyorum. Aşağıdaki kodda, olay silent parametre truthy olsa bile tetiklenir:Selectize.js: Öğe sessizce eklendiğinde onItemAdd olayı tetiklendi

$(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/

belgelerine göre:

  • addItem(value, silent): "seçer" bir öğe. Mevcut caret konumunda listeye ekler. "Sessiz" gerçekse, orijinal girdiye hiçbir değişiklik olayı başlatılmayacaktır.

onItemAdd etkinliğini tetiklemekten nasıl sakınılırız? silent parametresi b0rked mı yoksa change olayını mı kullanmalıyım?

+1

Not: Ben öğe ekledi sonra selectize örneğinden ve geri ayarlayın Öğeyi daha sonra işleyiciye yeniden etkinleştirin, ancak yapılması gerektiği gibi görünmüyor =/ –

+0

Ne işe yarıyorsunuz? .ara sıra()? Orijinal seçim – temuri

+0

Eminim, [selectize instance] 'ın .on() 've' .off() 'olay yöntemleri (https://github.com/selectize/selectize.js/blob/master/docs /api.md#methods_events) –

cevap

1

addItem(value, silent)'daki sessiz parametre, yalnızca change etkinliğinin olup olmadığını etkiler. silent = true ile item_add olayından kaçınamazsınız. benim için çalıştı tek şey lokal item_add olayı saklamak için oldu

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

Ayrıca, "item_add" olayından önce "off (...)" ifadesini kullanmadan ve "... madde? –

+0

Aslında bu doğru değil, 'change' olayı zaten atıldı. İlk soruya bağlanan JSFiddle, bunu göstermek için güncellendi. –

+3

0.12.0 sürümündeki bir hata. Bu örneği http://jsfiddle.net/6zyums3d/1/ 0.12.1 sürümü ile deneyin. – alemv

6

... kaldırmak `kapalı (...)` ve `işleyicisi devre dışı bırakmak için (...)` fonksiyonları üzerine ekleyin ı kullanabilirsiniz:

onItemAdd: function(val) { 
    var e = this._events['item_add']; 
    delete this._events['item_add']; 
    this.addItem(123); 
    this._events['item_add'] = e; 
} 
+0

Evet, "kabul edilebilir" bir çözümdür, ancak bu tür bir _hacky _...: -p –

0

benim için çalışan bir hızlı düzeltme devlet bayrağını tutmak ve olay işleyicisi kendisine atıfta bulunmak için oldu

İlgili konular