2010-06-30 3 views
0

모두 안녕하세요. 기본적으로 나는 그 안에 기본값이있는 텍스트 입력 필드로 가득 찬 페이지를 가지고있다.교차 함수 변수에 대한 데이터를 사용하는 jquery

사용자가 입력에 집중하면 값을 아무 것도 설정하지 말고 사용자가 초점을 맞추고 입력이 여전히 비어 있으면 그 값을 다시 그 값으로 변경하고 싶습니다. 원래는. 나는이이 순간

,하지만 작동하지 않습니다 :

$("#login input").focus(function(){ 
    $(this).val(""); 
     $(this).data({ 
      value: $(this).val() 
     }); 
}); 
$("#login input").focusout(function(){ 
 if($(this).val()=="") { 
  $(this).val($(this).data("value")); 
 } 
}); 

는 내가 필요로하는 것은의() 종류 .change하지 어떤 종류입니까? 아마도? 사전에

감사

답변

3

같이, 그것을 조금 (! 초점의 순서를 반대로) 다시 쓰기 :

$("#login input").focus(function(){ 
    $.data(this, "value", $(this).val()); 
    $(this).val(""); 
}); 
$("#login input").focusout(function(){ 
    if($(this).val()=="") { 
    $(this).val($.data(this, "value")); 
    } 
}); 

$.data() 바로 가기가 조금 깔끔한 덜 낭비 (별도입니다 jQuery 객체) ...하지만 주된 문제는 focus에서 주문을 교환해야하고 을 지우고을 저장하기 전에 매번 ""으로 저장되고 있다는 것입니다.

+0

+1 문제가 첫 번째 처리기의 명령문 순서에 있음을 조금 더 명확하게 할 수 있습니까? – MvanGeest

+0

@MvanGeest - 완료 : –

+0

굉장! D : $ .data에 대한 정보를 주셔서 감사합니다. – Tim

0

먼저 빈 값을 설정하고 그 빈 값을 저장하기 때문에 작동하지 않습니다. 이 시도 : 당신이 분야에서 기본값보다 서로를 넣을 수 있습니다

$("#login input").focus(function(){ 
    $(this).data({ 
    value: $(this).val() 
    }); 
    $(this).val(""); 
}); 
$("#login input").focusout(function(){ 
    if($(this).val()=="") { 
    $(this).val($(this).data("value")); 
    } 
}); 
0
<div id="login"> 
<input type="text" data-default="default value"/> 
</div> 

<script type="text/javascript"> 
$("#login input).focus(function(){ 
    var $this = $(this); 
    if($this.val() == $this.attr('data-default')) $this.val(""); 
}).blur(function(){ 
    var $this = $(this); 
    if($this.val() == "") $this.val($this.attr('data-default')); 
}).blur(); 
</script> 

이 방법을, 그들을 제거받지 않고. 즉, 사용자는 허위 암호를 입력하면 사용자가 처음 시도 할 때 사용자 이름을 채울 수 있습니다. 네가 그렇게한다면. 이 필드에 초점을 맞추면이 값이 제거됩니다.

+0

중복 된 코드를 갖는'.each()'대신'.each (...)'를'.blur()'로 대체 할 수 있습니다. 첨부, 두 번 같은 코드를 넣을 필요가 없습니다. –

+0

@Nick Craver : 조언 해 주셔서 감사합니다. 나는 내 코드를 바꿀 것이다. – jigfox

관련 문제