jQuery UI 자동 완성을 선택한 후 양식 필드 지우기


97

양식을 개발 중이며 jQuery UI 자동 완성을 사용하고 있습니다. 사용자가 옵션을 선택하면 선택 항목이 상위 <p>태그에 추가 된 범위에 표시되기를 원합니다 . 그런 다음 필드가 선택 항목으로 채워지지 않고 지워지기를 원합니다.

스팬이 괜찮아 보이지만 필드를 지울 수 없습니다.

jQuery UI Autocomplete의 기본 선택 작업을 어떻게 취소합니까?

내 코드는 다음과 같습니다.

var availableTags = ["cheese", "milk", "dairy", "meat", "vegetables", "fruit", "grains"];
$("[id^=item-tag-]").autocomplete({
    source: availableTags,

    select: function(){
        var newTag = $(this).val();
        $(this).val("");
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    }
});

단순히하는 $(this).val("");것은 작동하지 않습니다. 미친 것은 자동 완성을 무시하고 사용자가 쉼표를 입력하면 거의 정확한 기능이 제대로 작동한다는 것입니다.

$('[id^=item-tag-]').keyup(function(e) {
    if(e.keyCode == 188) {
        var newTag = $(this).val().slice(0,-1);
        $(this).val('');
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    }
});

실제 최종 결과는 자동 완성 기능이 여러 선택 항목과 함께 작동하도록하는 것입니다. 누구든지 그것에 대한 제안이 있으면 환영받을 것입니다.

답변:


182

필드를 지우고 이벤트를 취소하려면 함수 $(this).val(''); return false; 끝에 추가하십시오. select:)

이렇게하면 값이 업데이트되지 않습니다. 여기 109 번 줄에서 어떻게 작동하는지 볼 수 있습니다 .

거기에있는 코드는 구체적으로 false를 확인합니다.

if ( false !== self._trigger( "select", event, { item: item } ) ) {
  self.element.val( item.value );
}

환상적입니다! 그래도 바보 같아요. 이제 알아요. 아는 것은 전투의 절반입니다.
Jon F Hancock

그것은 그것을 고쳤습니다. 나는 받아들이려고했지만 7 분 더 할 수 없다고 말했다. 수락되었습니다. 감사.
Jon F Hancock

1
false를 반환하면 더 이상 값을 직접 설정할 필요가 없습니다 (즉, 필요 없음 $(this).val('');)
Uri

9
입력 필드에 값이 전혀 없도록 .val('')하려면 호출이 계속 발생해야 한다고 생각 합니다. 는 return false;단지 입력 필드에 표시 선택한 항목의 텍스트를 방지 할 수 있습니다.
라이언

1
Uri는 정확하지 않고 Ryan은 정확합니다. 선택 사항으로 업데이트되지 않도록하려면 false를 반환해야하며, 지우려면 $ (this) .val ( '')이 추가로 필요합니다.
mynameistechno 2011

19

false를 반환하는 대신 event.preventDefault ()를 사용할 수도 있습니다.

select: function(event, ui){
    var newTag = $(this).val();
    $(this).val("");
    $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    event.preventDefault();
}

이 방법이 허용되는 답변보다 더 효율적이라고 생각합니다.
dlsso

6

필드를 비우려면 select 콜백 내에서 return false가 필요합니다. 그러나 필드를 다시 제어하려는 경우, 즉 값을 설정하려면 새 함수를 호출하여 UI를 벗어나야합니다.

다음과 같은 프롬프트 값이있을 수 있습니다.

var promptText = "Enter a grocery item here."

요소의 val로 설정하십시오. (초점에서 ''로 설정).

$("selector").val(promptText).focus(function() { $(this).val(''); }).autocomplete({
    source: availableTags,
    select: function(){
        $(this).parent().append("<span>" + ui.item.value + "<a href=\"#\">[x]</a> </span>");
     foo.resetter(); // break out //
    return false;  //gives an empty input field // 
    }
});

foo.resetter = function() {
  $("selector").val(promptText);  //returns to original val
}

안녕하세요, 프롬프트 저장에 대해 다른 질문이 있습니다. 기술적 인 이유로 자리 표시자를 사용할 수 없습니다. 완벽했습니다, 감사합니다!
hgolov

5

그것은 나를 위해 잘 작동합니다.

이벤트를 선택한 후 이벤트 변경을 사용했습니다.

 change:function(event){
   $("#selector").val("");  
   return false;
 }

저는 초보자입니다!


0

이 시도

select: function (event, ui) {
    $(this).val('');
    return false;       
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.