2012-12-11 46 views
9

我正在使用Select2在我的應用程序中創建Gmail樣式的電子郵件地址字段。除了一種情況外,它的效果很好:當用戶鍵入一個電子郵件地址並且沒有在其後面輸入空格或逗號時,並且沒有輸入或選項卡時。例如,如果他們只是鍵入一個電子郵件地址,然後使用鼠標選擇表單中的下一個字段,則他們輸入的電子郵件地址將消失。模糊的jQuery Select2標記

我有一個例子jsfiddle here說明了這個問題。

這裏是我如何在我的隱藏輸入設置選擇2:

$(function(){ 
    $('input').select2({ 
     tags: [], 
     width: "300px", 
     dropdownCss: {display: 'none'}, 
     tokenSeparators: [',', ', ', ' '] 
    }); 
}); 

有我設置選擇2,這樣的onblur它只是需要無論是左,目前還不是標籤和方式使它成爲一個?

回答

17

現在,使用'selectOnBlur'選項在select2庫的3.3版本中支持此功能。

+2

你可以請示例。 –

+0

這似乎不適用於Select2 4.0.1-rc.1:'$ .fn.select2.defaults.set(「selectOnBlur」,「true」);' – EriF89

+0

該選項已被重命名爲'selectOnClose' – kartikluke

1

我真的不明白你正在嘗試做的,因爲你談論電子郵件:

jQuery(element.val().split(",")).each(function() { 
       data.push({id: this, text: this}); 
      }); 

不過你可以試試這個:

var splitted = element.val().split(","); 
for(var i=0,z=splitted.length;i<z;i++) 
    data.push({id: splitted[i], text: splitted[i]}); 

順便說一句,你的jsfiddle是uncomplete。

+0

我已經刪除了這些設置,因爲它們與手邊的問題無關,並更新了我的小提琴和上面的代碼。 – davertron

3

我有一個形式與select2(標記模式)和一個提交按鈕。默認情況下,當用戶鍵入一個標籤時,如果沒有從下拉列表中選擇標籤或按下其中一個觸發控制鍵,用戶輸入將會丟失,因爲插件會在blur事件關閉生成的輸入dom對象。

我快速解決這個問題是破解插件模糊功能,並添加下面幾行:

var val=this.search.val(); 
if($.trim(val)!='') this.onSelect({id:val,text:val}); 

一旦虛函數被調用時,上面的代碼檢查,如果用戶輸入。如果有觸發器選擇事件併發送所需的對象。我傳遞的對象僅適用於標記模式下的select2,如果您使用select2 v3.2,則可以在1311行的AbstractSelect2的blur函數開始處插入此行。我希望這可以讓您瞭解如何自定義根據您的需要小部件。

+1

雖然我不喜歡自己修改庫以獲得此功能,但它是目前爲止唯一的解決方案。我做的一個額外的改變是將「noFocus:true」傳遞給「onSelect」方法,然後在底部檢查並且不調用「focusSearch」,因爲輸入文本真的很煩人,請單擊另一個文本字段然後讓舊的select2框再次聚焦。 – davertron

+0

感謝@Ramin和@davertron!由於某些原因,我無法使用最後一個版本的select2(外部點擊不會關閉任何東西),所以我回到了v3.2,並對你們做了兩件事。是非常棘手的,因爲我只訪問到縮小版本。無論如何,這裏的黑客的最後的要點,爲其他人:https://gist.github.com/hartator/6689203 – Hartator

1

documentation爲4.0.3:

$('select').select2({ 
    selectOnClose: true 
}); 

這將捕獲的選擇,如果用戶點擊其他地方創建一個標籤。