2013-08-12 2 views
2

jquery 날짜 이벤트 UI가 작동하는 것과 유사한 방식으로 요소를 드롭 다운하는 것처럼 작동하는 두 개의 입력 요소가 있습니다. 응용 프로그램의 특성 때문에이 방법을 유지해야합니다. 요소를 편집 할 수 없도록 설정했습니다. 이렇게하면 사용자가 옵션 목록을 사용하여 가상 드롭 다운 메뉴를 작성하고 사용자가 직접 조작 할 수 없게됩니다. 하나를 클릭하면 jQuery 플러그인은 값을 해당 입력에 지정합니다.블러 이벤트가 발생하지 않는 포커스가없는 요소

문제는 유효 검사기가 onblur으로 트리거되므로 유효성 검사기가 중간에 유효성 검사를받는 것처럼 보이므로 문제가 없습니다. 유효성 검사기 플러그인을 다시 작성하는 것을 싫어합니다.

특정 클릭 이벤트에서 포커스 또는 흐림 이벤트가 모두 발생하지 않도록하는 방법이 있습니까? 여기

도전

http://jsfiddle.net/powerphillg5/YHgKQ/

을 가진 JS 바이올린 그리고 여기에 우리가 여기에 코드를해야하기 때문에 링크 # 법률-abidingcitizen 제공 할 때 거기에 코드입니다 :

<input type="text" id="my_input" value="Click me." /> 
<script> 
$('#my_input').blur(function(){ 
    alert("Prevent me without removing the blur() and function that caused me!"); 
}); 

$("#my_input").click(function(){ 
    $(this).after("<ul>\ 
        <li data-value='value1' class='click_me'>Now, click me,</li>\ 
        <li data-value='value1' class='click_me'>or me!</li>\ 
        </uL>"); 

    $(".click_me").click(function(){ 
     $("#my_input").val($(this).data("value")); 
     $(this).parent().remove(); 
     $("#my_input").after("<img src='http://harrisongreetingcards.net/images/1316_thank_you_for_your_time_note_card.png' />"); 
    }) 

}); 
</script> 
+1

jsFiddle의 샘플? –

+0

모든 설정, 감사합니다! –

답변

0

을 당신이 원하는 것은 그 이벤트에서 블러 핸들러를 언 바인드하는 것이므로 핸들러를 추가 한 후에 이것을 추가하십시오 :

당신이 핸들러를 바인딩을 해제 할 수없는 경우

또는 상황이 추가됩니다 따라 어디 - 아직 추가되지 있기 때문에 - 당신이 다른 어떤 나중에 추가 핸들러가 꺼져가는 않도록 자신의 핸들러를 추가 할 수 있습니다

본질적으로 이러한 이벤트가 발생하지 않도록하고 있기 때문에 전체 기능에 영향을 미칠 수 있습니다. 따라서 특정 지점에서 기능을 리 바인드하고 이벤트를 위장하거나 특정 기능 만 호출 할 수 있습니다.

편집 : 질문을 다시 읽은 후에. click 이벤트 전에 blur 이벤트가 발생하기 때문에 click 이벤트 내부에서 blur 이벤트를 끌 수 없습니다. 따라서 다른 상황에서 블러 이벤트가 발생하기를 원한다면 (예를 들어 상자에서 탭을 벗어나면) 더 지루한 작업이 필요할 것입니다. 이 경우에는 무엇을 해야할지를 결정하는 자신 만의 블러 핸들러를 작성하거나, 다른 필드가 포커스를 얻었을 때 의도적으로 블러 이벤트를 강제하는 다른 핸들러를 추가해야 할 수도 있습니다.

귀하의 신청서를 모르기 때문에 필요한 것을 알기가 어렵지 만 잘하면 도움이 될 것입니다.

0

나는 생각이 있지만 못생긴지만 일할 수 있습니다.

  1. 원래 흐림을 유지합니다.
  2. 새 흐림 수신기를 변경하여 setTimeout에 의해 원래 흐림 효과를 호출합니다.
  3. 제한 시간 실행 전에 .click_me 요소를 클릭하면 취소됩니다. 그렇지 않으면 그냥 놓아 줘.

코드

var blurTimeout = false; 
var inputObject = $('#my_input'); 
var inputBlur = $._data(inputObject[0], 'events').blur[0].handler; 
inputObject.off('blur').blur(function(e) { 
    blurTimeout = setTimeout(function() { 
     inputBlur.apply(inputObject, e);//call original blur. 
    }, 500); 
}); 

모양과 클릭 기능에 제한을 취소 추가합니다.

$(".click_me").click(function(){ 
    clearTimeout(blurTimeout); 
    ... 

이고, 바이올린은 here입니다.

여전히 흐림 효과를 직접 변경하는 것이 좋습니다.

관련 문제