2013-06-04 8 views
1

텍스트 영역을 사용자가 입력 할 수 있습니다. 텍스트 영역에 입력 할 수 있습니다. 시작은 소문자이지만 'T (토글)'버튼을 클릭하면 무엇을 할 수 있습니까? 이후 입력은 대문자로 바뀌며 이전 입력은 소문자로만 진행됩니다. 다시 사용자가 'T (토글 버튼)'을 클릭하면 그 이후에 어떤 문자가 입력되는지가 소문자로 표시됩니다. 나는 시도했지만 성공하지 못했습니다.버튼 클릭시 토글 케이스

<input type="button" name="toggleCase" id="toggleCase" value="T" style="width:40px;" onclick="javascript:changeCase(this);" /> 
<textarea tabindex="1" cols="39" rows="2" onkeydown="checkTxtCase(this);" name="titleText1">&nbsp;</textarea> 

JS : 어떤 제안이 이해된다

function checkTxtCase(elmObj) { 
    setCursorToTextEnd(elmObj.id); 
    var txtVal = elmObj.value; 
    var txtLen = txtVal.length; 

    prevSize = txtLen; 
    var txtLast = txtVal.substring(txtLen - 1, txtLen); 

    if (textCase == 'LOWER') { 
     elmObj.value = txtVal.substring(0, txtLen - 1) + txtLast.toLowerCase(); 
    } else { 
     elmObj.value = txtVal.substring(0, txtLen - 1) + txtLast.toUpperCase(); 
    } 
    return true; 
} 


function setCursorToTextEnd(textControlID) { 
    var text = document.getElementById(textControlID); 
    if (text != null && text.value.length > 0) { 
     if (text.createTextRange) { 
      var FieldRange = text.createTextRange(); 
      FieldRange.moveStart('character', text.value.length); 
      FieldRange.collapse(); 
      FieldRange.select(); 
     } else if (text.setSelectionRange) { 
      var textLength = text.value.length; 
      text.setSelectionRange(textLength, textLength); 
     } 
    } 
} 


var textCase = 'UPPER'; 
var prevSize = 0; 

function changeCase() { 
    document.getElementById('titleText1').focus(); 
    textCase = (textCase == 'LOWER') ? 'UPPER' : 'LOWER'; 
} 

.

+0

내가 http://jsfiddle.net/KKX5G/ – Rosh

+0

이 왜 그냥 자바 스크립트를 toUpperCase 기능 내장 사용 여기 시도 확인? – Benubird

답변

2
var textCase = 'toLowerCase'; 
var pos = 0; 

function changeCase() { 
    var textarea = document.getElementsByName('titleText1')[0]; 
    pos  = textarea.value.length; 
    textCase = (textCase == 'toUpperCase') ? 'toLowerCase' : 'toUpperCase'; 
    textarea.focus(); 
} 

function checkTxtCase(elem) { 
    var l = elem.value.substr(pos); 
    elem.value = elem.value.substr(0, pos) + l[textCase](); 
} 

FIDDLE

+0

adeneo, 사용자가 텍스트 영역 콘텐츠를 삭제하면 pos 값은 어떻게 될까요? – Rosh

+1

pos 값은 여전히 ​​동일합니다.이 [** FIDDLE **] (http://jsfiddle.net/KKX5G/3/)에서 확인한 것처럼 pos 값을 0으로 재설정하면 수표를 추가 할 수 있습니다. 또한이 케이스를 변경하는 유일한 방법은 텍스트 영역의 값을 재설정하는 것이므로 키를 누른 후 끝 부분에 항상 캐럿이 끝나고 캐럿 위치를 가져 와서 원래 위치로 재설정 할 수 있다는 점에 주목하십시오. 다른 많은 작은 문제 등이 있지만이 방법은이를 수행하는 방법이며, 사용자가 원하는 복잡성을 파악해야합니다. – adeneo

+0

감사합니다 adeneo, 내가 코드를 수정하고 그것을 달성 http://jsfiddle.net/KKX5G/9/ – Rosh

0

나는 당신을 위해 플러그인을 발견했다. 정말 멋지다. 정말 효과적이다.

http://jquerybyexample.blogspot.com/2011/12/jquery-plugin-for-uppercase-lowercase.html

이 내가 당신을 위해 바이올린을 만든 당신

도움이 될 것입니다. 그것은

http://jsfiddle.net/KKX5G/2/

$('#Txt').Setcase({caseValue : 'lower'}); 
+0

Really Cool Plugin Elegant Coder +1 – Rohith

+0

Elegant Coder 덕분에 전체적인 대소 문자를 변경하고 싶지는 않지만 전환 버튼을 클릭 한 후에 만 ​​해당 문자 만 대소 문자를 변경해야합니다. – Rosh

+0

OK .. 나는 그 사실을 몰랐다. 이 플러그인이 때때로 유용 할 수 있기를 바랍니다. :) –