2013-04-26 3 views
1

필수 입력란마다 상자 뒤에 별표가있는 입력 양식을 만들고 싶습니다. 사용자가 문자열을 입력하면 별표는 느낌표로 변경됩니다. 지금 자바 스크립트 코드는 사용자가 문자를 입력 할 때마다 느낌표를 추가합니다.동적으로 텍스트 입력을 확인하십시오.

HTML :

<form name="form1"> 
<ul> 
<li><input type='text' name ='text1' required placeholder="required"/></li> 
<li><input type='text' name ='text1' required placeholder="required"/></li> 
<li><input type='text' name ='text1' placeholder="not required"/></li> 
</ul> 
</form> 

JAVA/JQUERY : 당신이 도움을

$(function() { 
     $('input:required').after("<span>*</span>"); 

    }); 

$('input:required').keyup(function(){ 
    var dInput = this.value; 
    if(dInput.length > 0) 
    //if($('input:required').is(':valid')) 
    { 
     $(this).after("<span>!</span>") 
    } 
}); 

들으!

+0

사용자가 문자열을 입력 한 다음 느낌표로 변경하면 문자를 입력 할 때 바로 변경되므로 문자열과 문자의 차이는 무엇일까요? – rahularyansharma

+0

문자열에 숫자가 포함될 수도 있습니다. 맞습니까? 그러나 주 메커니즘을 올바르게 가져올 수 없어 코드가 사용자가 무언가를 입력했는지 확인하고 시각적 피드백 (예 : 느낌표)을 표시합니다. – FLuttenb

답변

1

메인에 문제가 .afterspan 요소 당신이를 호출 할 때마다 추가하는 것입니다, 당신은 .parent().children("span")를 사용하여 previsouly 생성 스팬 요소를 다시 가져온 다음의 내용으로 변경할 수 있습니다

$(this).parent().children("span").text("!") 

을 대신 :

$(this).after("<span>!</span>") 

이것은 코드를 수정하는 가장 간단한 방법이지만, 원하는 작업을 수행하는 최선의 방법은 아닙니다.

$('input').keyup()은 완전한 제어 실시간 유효성 검사를위한 좋은 접근 방법이지만 validation plugin of jQuery을 살펴볼 수도 있습니다.

$(function() { 
    $('input:required').each(function(index) { 
     var id = this.form.name+this.name+"mark"; 
     $(this).after("<span id='"+id+"'>*</span>"); 
    }); 
}); 

$('input:required').keyup(function(){ 
    if(this.value.length > 0) { 
     var id = this.form.name+this.name+"mark"; 
     $("#"+id).text("!"); 
    } 
}); 
:

편집

예 A span ID를 사용하는 대신 DOM 트리를 탐색, 이것은 당신이 자바 스크립트 코드를 깨지 않고 HTML 트리에 어디서나 span 태그를 이동할 수 있습니다 것

이 기능을 사용하려면 양식에 고유 한 이름이 있어야합니다.

또한주의 그 span 태그와 자신의 id를 대응하는 정적 HTML로 작성 또는 대신 자바 스크립트의 클라이언트에 의해 생성되는 서버에서 생성 할 수있다.

+0

빠른 답변 주셔서 감사합니다. 정말로 감사드립니다. 그건 내 다음 질문이 될 것입니다 : 내 접근 방식이 맞습니까? 아니면 내가하고 싶은 일을 해결할 더 좋은 방법이 있습니까? – FLuttenb

+0

'$ ('input') .keyup()'은 좋은 접근법이며'.parent()입니다.어린이()'는별로 산뜻하지 않습니다. id를 추가하여'input' 태그에 해당하는'span' 태그를 얻을 수 있습니다. – zakinster

+0

사실이지만 문제는 모든 단일 텍스트 입력에 ID를 지정해야한다는 것입니다. 10 개의 입력이 있으면 10 개의 ID가 필요합니다. 코드를 최대한 유연하게 유지하기 만하면됩니다. 어떻게 생각해? – FLuttenb

0

.foucsout()을 사용해야합니다. 텍스트 필드에서 포커스가 사라지 자마자 Tab 키를 눌러 다음 필드 나 버튼으로 이동하십시오. 길이에 대한 .focusout() 콜백에서 테스트하고 '!'를 추가하십시오.

또한 @zakinster 솔루션을 참조하십시오. 그의 해결책은 '*'를 '!'로 대체하는 데 도움이 될 것입니다. 나는 이것을 이해했다. 나는 .focusout()을 제안했는데, 사용자가 입력을 완료했을 때 별표를 느낌표로 바꾸고 입력을 판단 할 수있게했다.

+0

,. focusout() 좋은 기능입니다! – FLuttenb

관련 문제