2012-02-17 2 views
0

배경 - 텍스트 필드가있는 양식이 있습니다. 사용자는 2-6 자리 정수를 입력합니다. 각 키 스트로크에서 javascript 함수는 드롭 다운에서 일치하는 값을 호출합니다. onKeyUp 함수가 모든 결과를 반환하지 않습니다.

내 텍스트 필드 :

<input type="text" name="orgSICCode" value="" allownull="FALSE" size="5" maxlength="10" datatype="dtNumeric" onKeyUp="ActivateOption(description,this.value);" onBlur="this.value = description.options[description.selectedIndex].value;" emsg="Must choose a SIC Code before you can continue."> 

내 드롭 다운 필드 :

<select name="description" STYLE="width:275px;" onChange="orgSICCode.value = this.options[this.selectedIndex].value;sic_code_description.value = this.options[this.selectedIndex].text;"> 
     <option value="">Select One ...</option> 
     <option value="085101">085101 - Forest management services</option> 
     <option value="0831">0831 - Forest Products</option> 
     <option value="083100">083100 - Forest products</option> 
     <option value="083199">083199 - Forest products, nec</option> 
     <option value="08">08 - Forestry</option> 
    </select> 

내 자바 스크립트 함수의 ActivateOption :

function ActivateOption(selectObj, strValue) { 
    for(var idx=0;idx<selectObj.options.length;idx++) { 
     if(selectObj.options[idx].value.substring(0,strValue.length) == strValue) { 
     selectObj.selectedIndex = idx; 
     return true; 
     } 
    } 
    selectObj.selectedIndex = 0; 
    return false; 
} 

때 사용자 유형 '08', 첫 번째 옵션이 08 값인 "08 - 임업"옵션입니다. 채우는 옵션은 '085101', '085101 - 산림 관리 서비스'입니다.

내가 잘못 했나요?

감사합니다.

답변

0

이 옵션 문자열을 응답 아담에 대한

// this function return the most similer string, 
// sarr take a string arr which to filte 

function checkString (sarr, srcStr) { 
    var ret = "", val = 0, srcStr = srcStr.split(""); 
     sarr.forEach(function (content, index ) { 
      var i, l, curval = 0, cont = content.split(""); 
      for (i = 0, l = cont.length; i < l; i += 1){ 
       if (cont [i] === srcStr[i]){ 
        curval += Math.pow (10, i); 
       } else { 
        break; 
       } 
      } 
      if (curval > val){ 
       val = curval; 
       ret = content; 
      } else if (curval === val && Math.abs (content.length - srcStr.length) < Math.abs (ret.length - srcStr.length)){ 
       ret = content; 
      } 
     }) 
     return ret; 
} 
0

strValue으로 시작하는 첫 번째 항목에 대해 true를 반환하기 때문에 드롭 다운은 가장 일치하는 항목이 아닌 첫 번째 일치하는 항목으로 설정됩니다.

시도 :

function ActivateOption(selectObj, strValue) { 
    selectObj.selectedIndex = 0; 
    for(var idx=0;idx<selectObj.options.length;idx++) { 
     if(selectObj.options[idx].value.substring(0,strValue.length) == strValue) { 
     selectObj.selectedIndex = idx; 
     } 
    } 
} 
+0

감사를 확인하기 위해 더 나은 필터를 사용하지만이 작동하지 않는 것 같습니다. 그것은 현재의 함수에 비슷한 결과를 반환합니다. – etm124

+0

나의 if 조건의 첫 번째 부분은 FIRST가 아니라 'strValue'의 값과 일치하는 것 같습니다. – etm124