2

<input>name:valuesのリストと照合される前に、ユーザーがjQuery自動補完テキストボックスに入力した入力をトリミング(先頭/末尾のスペースを削除)する方法はありますか?現在、ユーザーが名前を入力するためのテキストボックスがあります。次に、名前はjQueryによってname:valueペアのリストと照合されます。

<script type="text/javascript">

var resources = [
               <?php 
                    foreach($data['Resource'] as &$row){
                        $Name = $row['Forename']." ".$row['Surname'];  
                        echo "{";
                        echo "  label:'$Name',";
                        echo "  value:'$row[EmployeeNumber]'";
                        echo "},";
                    }
                 ?>
                ];

    jQuery(function(){
        jQuery('#Resource').autocomplete({
            source: resources,
            focus: function(event, ui) {
                jQuery('#Resource').val(ui.item.label);
                return false;
            },          
            select: function(event, ui) {
                jQuery('#Resource').val(ui.item.label);
                jQuery('#EmployeeNumber').val(ui.item.value);
                return false;
            }
        });
    }); 
</script>

私の問題は、ユーザーがresourcesマップ内の1つと一致する名前を入力したが、その後にスペースが含まれている場合、その名前は一致しないため、入力に値が割り当てられないことです。可能であれば、このマッピングでは少なくとも末尾のスペース(先頭のスペースではない場合)を無視したいと思います。

さらに、マップが見つからない場合、入力ボックスにデフォルト値を追加することは可能ですか?

編集:

余談ですが、ユーザーが一致しないものを入力した場合、ドロップダウンオートコンプリートボックスに一致しないエントリが表示される可能性はありますか?質問後の編集についてお詫びします。

4

2 に答える 2

5

次のように、組み込み関数sourceを使用する代わりに、関数内で自分自身を見つけることができます。

source: function( request, response ) {
  var matcher = new RegExp($.trim(request.term).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i" );
  response($.grep(resources, function(value) {
    return matcher.test( value.label || value.value || value );
  }));
}

ここでデモを試すことができます。これは$.trim()、検索語が渡される前に検索語を切り捨てて、$.grep()必要な先頭/末尾の空白を無視する効果を取得するために使用します。


編集のためにこれを行うことができますが、「結果なし...」が選択可能になります。ここで試してみてください

source: function( request, response ) {
  var matcher = new RegExp($.trim(request.term).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i" );
  var matches = $.grep(resources, function(value) {
    return matcher.test( value.label || value.value || value );
  });
  response(matches.length ? matches : [{ label: 'No Result Found', value: '' }]);
}
于 2010-07-22T10:57:55.603 に答える
1

使用jQuery.trim

jQuery.trim(yourValue);
于 2010-07-22T09:45:45.870 に答える