jQuery の .val() メソッドが空白を処理する方法について混乱しています (それが jQuery の問題である場合)。
私の例は、私がゆっくりと開発している AJAX 提案ボックス機能を使用しています。フレームワークとして Codeigniter を使用します。
私はこのjQueryコードを持っています:
$(document).ready(function(){
$("#suggestbox").hide();
$("#searchboxinput").live("keyup", function(){
if ($("#searchboxinput").val().length==0){
$("#suggestbox").fadeOut(100);
}else{
$("#suggestbox").fadeIn(100);
$("#sugresultcontain").load('http://localhost/ajaxtest/ajaxhandle/suggest/'+$("#searchboxinput").val()+' #loadsuggest');
};
});
});
「#suggestboxinput」は、次のようなテキスト入力です。
<div id="content" class="clear">
<div id="searchwrap" class="clear">
<div id="searchbox" class="float-left"><input id="searchboxinput" name="" value="" type="text"></div>
<div id="searchbutton" class="float-right"><input id="searchbuttoninput" name="" type="button" value="Go"></div>
</div>
<div id="suggestbox" class="clear">
<div id="suggesthead">Suggestions:</div>
<div id="sugresultcontain"></div>
</div>
</div>
次に、(コード イグナイターを使用して) .load() を処理するメソッドを次のように作成します。
public function suggest($q=''){
$suggest = $this->ajax_handle->suggest();
for($i=0; $i<count($suggest); $i++){
$db[$i] = $suggest[$i]['firstname'].' '.$suggest[$i]['lastname'];
}
if(strlen($q)>0){
$sugstr = '';
$e = 0;
for($f=0; $f<count($db); $f++){
if (strtolower($q)==strtolower(substr($db[$f],0,strlen($q)))){
$sugresult[$e] = $db[$f];
$e++;
}
}
if(isset($sugresult)){
$data['sugresult'] = $sugresult;
$this->load->view('ajaxref/suggest', $data);
}else{
$this->load->view('ajaxref/suggest');
}
}else{
$this->load->view('ajaxref/suggest');
}
}
これはほぼ意図したとおりに機能します。ページをロードしてから、データベースからの名前が表示されるテキスト入力を使用すると (テキスト フィールドに従って)。名を入力すると問題なく動作し、フィールドの後にスペースをいくつ入れても表示され続けます (これは完璧です)。
ただし、問題は、1 つのスペース (Dominic Sore) または最初の文字または姓 (Dominic S) の後に姓を入力することにあります。提案ボックスに名前が表示されません。
入力ボックスで「+」記号を使用すると機能することを読みました。私はそれをテストしましたが、うまくいきました (Dominic + Sore は提案ボックスに Dominic Sore を出力します)。当然のことながら、ユーザーが使用したいすべてのスペースに「+」を入力させることはできません。
だから私はこれをどのように処理するのだろうか?私はたくさん読んでいますが、解決策が見つかりません。
ありがとう。