2012-02-17 12 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> 

マイjavascript関数の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

関連する問題