2012-12-11 2 views
9

Select2를 사용하여 응용 프로그램에 Gmail 스타일의 전자 메일 주소 필드를 만듭니다. 그것은 하나의 경우를 제외하고는 훌륭하게 작동합니다 : 사용자가 전자 메일 주소를 입력하고 그 뒤에 공백이나 쉼표를 넣지 않고 입력 또는 탭을 누르지 않은 경우. 예를 들어 전자 메일 주소를 입력 한 다음 마우스를 사용하여 양식의 다음 필드를 선택하면 입력 한 전자 메일 주소가 사라집니다.jQuery Select2 Tag on Blur

문제점을 설명하는 예제가 jsfiddle here입니다.

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

그냥 남아 무엇이든 받아 현재 태그 아니며 및 onblur 있도록 나를 선택 2를 설정 할 수있는 방법이 있나요 : 내 숨겨진 입력을 선택 2를 설정하고있어 방법은 다음과

입니다 그것 하나?

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

을하지만 대신이 시도 할 수 : 내가 그나마

답변

17

이제 'selectOnBlur'옵션을 사용하여 select2 라이브러리 버전 3.3에서 지원됩니다. 4.0.3로 documentation에서

+2

예를 보여 주실 수 있습니까? –

+0

Select2 4.0.1-rc.1에서는 작동하지 않는 것으로 보입니다 :'$ .fn.select2.defaults.set ("selectOnBlur", "true"); ' – EriF89

+0

옵션의 이름이'selectOnClose'로 변경되었습니다. – kartikluke

1

정말 당신이 이메일에 대해 말하기 때문에 당신이 뭘 하려는지 이해 그런데

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

를, 당신의 jsfiddle입니다 완료되지 않았습니다.

+0

나는이 설정을 당면한 문제와 관련이없고 위의 코드와 코드를 업데이트했기 때문에 해당 설정을 제거했습니다. – davertron

3

select2 (태그 모드)와 제출 버튼이있는 양식이 있습니다. 기본적으로 사용자가 드롭 다운에서 태그를 선택하거나 트리거 제어 키 중 하나를 누르지 않고 태그를 입력하면 플러그인은 블러 이벤트에서 생성 된 입력 DOM 객체를 닫으므로 사용자 항목이 손실됩니다.

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

일단 흐리게 함수가 호출 될 때, 위의 코드 검사 사용자 항목의 경우 :

이 문제에 대한 나의 빠른 수정 플러그인 블러 기능을 해킹하고 다음 줄을 추가하는 것이 었습니다. 있는 경우 select 이벤트를 트리거하고 필요한 개체를 보냅니다. 내가 전달하는 객체는 태그 지정 모드에서 select2에만 적합하며 select2 v3.2를 사용하는 경우 1311 줄의 AbstractSelect2 블러 기능 시작 부분에이 선을 삽입 할 수 있습니다. 귀하의 필요에 따라 위젯.

+1

이 기능을 사용하기 위해 라이브러리를 직접 수정하지 않아도되지만, 지금까지 작동하는 유일한 대답입니다. 내가 한 추가 변경 사항은 "noFocus : true"를 "onSelect"메서드에 전달한 다음 맨 아래에서 "focusSearch"를 호출하지 말고 확인하는 것입니다. 텍스트를 입력하는 것이 정말 귀찮기 때문에 다른 텍스트 필드를 클릭하십시오 이전 select2 상자에 다시 집중 시키십시오. – davertron

+0

@Ramin과 @davertron 덕분에! 몇 가지 이유로 select2의 마지막 버전을 사용할 수 없습니다 (외부 클릭으로 아무 것도 닫지 않습니다). 그래서 v3.2로 돌아가서 두 가지 해킹을합니다. 내가 미니 버전에만 액세스했기 때문에 꽤 까다 롭습니다. 어쨌든, 여기에 다른 사람들을 위해 해킹의 최종 요령이 나와 있습니다. https://gist.github.com/hartator/6689203 – Hartator

1

는 :

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

이 선택을 캡처하고 사용자가 다른 곳에 클릭하면 태그를 생성합니다.

관련 문제