2

私は JavaScript を初めて使用し、PHP、Ajax、Javascript、および mysql を使用したライブ検索に取り組んできました。

最初の ID フィールドでうまく機能しますが、それを操作する必要がある合計 8 つの入力フィールドがあり、getElementById を編集しようとしましたが、検索が機能しませんでした。

JavaScript を編集して、8 つの入力フィールドのそれぞれでライブ検索を使用できるようにし、選択した検索項目をフィールド値として配信できるようにするにはどうすればよいですか?

JavaScript:

function liveSearch()
{
var url = "livesearch.php";
var s = document.getElementById('med1').value;
var params = "&s="+s;
http.open("POST", url, true);

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {
if(http.readyState == 4 && http.status != 200) {
document.getElementById('searchResults1').innerHTML='<li>Loading...</li>';
}
if(http.readyState == 4 && http.status == 200) {
document.getElementById('searchResults1').innerHTML = http.responseText; 
} 
}
http.send(params);
}

function sendToSearch(str){
document.getElementById('med1').value = str;
document.getElementById('searchResults1').innerHTML = "";
}

PHP:

$s = $_REQUEST["s"];
$output = "";
$s = str_replace(" ", "%", $s);
$query = "SELECT * FROM drug_list WHERE NAME LIKE '%" . $s . "%' or COMMON_NAME LIKE '%" . $s."%' or ALIAS LIKE '%" . $s . "%' LIMIT 10";
$squery = mysql_query($query);
if((mysql_num_rows($squery) != 0) && ($s != "")){
while($sLookup = mysql_fetch_array($squery)){
$displayName = $sLookup["COMMON_NAME"];
$product_name = $sLookup['NAME'];
$dose = $sLookup["DOSAGE"];
$units = $sLookup["UNITS"];
$output .= '<li onclick="sendToSearch(\''.$product_name.' (' . $displayName .') '.$dose.' '.$units. '\')">'.$product_name.' (' . $displayName .') '.$dose.' '.$units.'</li>';
}
}   

echo $output;

HTML フォーム (部分 - ID='med(n)' の 8 つの薬に出ます):

<td size='20'>Medication 1</td><td><input type='text' name='med1' id='med1' size='40' title='i.e.-Metoprolol 50 mg twice a day' onkeyup='liveSearch()' /></td><td size='40'><input type='text' name='med1_reason' size='40' title='i.e.-Highblood Pressure' /></td>
</tr>
<tr><td colspan='3' align='left'><span style='color:blue; cursor:pointer'><ul id="searchResults1"></ul></span></td></tr>
<tr>
<td size='20'>Medication 2</td><td><input type='text' name='med2' id='med2' size='40' title='i.e.-Metoprolol 50 mg twice a day' onkeyup='liveSearch()' /></td><td size='40'><input type='text' name='med2_reason' size='40' title='i.e.-Highblood Pressure' /></td>
</tr>
<tr><td colspan='3' align='left'><span style='color:blue; cursor:pointer'><ul id="searchResults2"></ul></span></td></tr>
<tr>
4

1 に答える 1

0

これは、ID「med1」のオブジェクトを明示的に使用したために発生します。次のようにコードを変更する必要があります。

Javascript:

function liveSearch(obj, no) { 
    var url = "livesearch.php"; 
    var s = obj.value; 
    var params = "&s="+s+"&no=" + no; 
    http.open("POST", url, true); 

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.setRequestHeader("Content-length", params.length); 
    http.setRequestHeader("Connection", "close"); 

    http.onreadystatechange = function() { 
        if(http.readyState == 4 && http.status != 200) { 
            document.getElementById('searchResults' + no).innerHTML='<li>Loading...</li>'; 
        } 
        if(http.readyState == 4 && http.status == 200) { 
            document.getElementById('searchResults' + no).innerHTML = http.responseText;  
        }  
    } 
    http.send(params); 
} 

function sendToSearch(str, no){ 
    document.getElementById('med' + no).value = str; 
    document.getElementById('searchResults' + no).innerHTML = ""; 
}

HTML:

<td size='20'>Medication 1</td><td><input type='text' name='med1' id='med1' size='40' title='i.e.-Metoprolol 50 mg twice a day' onkeyup='liveSearch(this,1)' /></td><td size='40'><input type='text' name='med1_reason' size='40' title='i.e.-Highblood Pressure' /></td> 
</tr> 
<tr><td colspan='3' align='left'><span style='color:blue; cursor:pointer'><ul id="searchResults1"></ul></span></td></tr> 
<tr> 
<td size='20'>Medication 2</td><td><input type='text' name='med2' id='med2' size='40' title='i.e.-Metoprolol 50 mg twice a day' onkeyup='liveSearch(this,2)' /></td><td size='40'><input type='text' name='med2_reason' size='40' title='i.e.-Highblood Pressure' /></td> 
</tr> 
<tr><td colspan='3' align='left'><span style='color:blue; cursor:pointer'><ul id="searchResults2"></ul></span></td></tr> 
<tr>

PHP:

$s = mysql_real_escape_string($_REQUEST["s"]); 
$output = ""; 
$s = str_replace(" ", "%", $s); 
$query = "SELECT * FROM drug_list WHERE NAME LIKE '%" . $s . "%' or COMMON_NAME LIKE '%" . $s."%' or ALIAS LIKE '%" . $s . "%' LIMIT 10"; 
$squery = mysql_query($query);

if((mysql_num_rows($squery) != 0) && ($s != "")){ 
    while($sLookup = mysql_fetch_array($squery)){ 
        $displayName = $sLookup["COMMON_NAME"]; 
        $product_name = $sLookup['NAME']; 
        $dose = $sLookup["DOSAGE"]; 
        $units = $sLookup["UNITS"]; 
        $output .= '<li onclick="sendToSearch(\''.$product_name.' (' . $displayName .') '.$dose.' '.$units. '\',' . $_REQUEST['no'] . ')">'.$product_name.' (' . $displayName .') '.$dose.' '.$units.'</li>'; 
    } 
}    

echo $output;

これでうまくいくはずです。頑張ってください!

于 2012-08-01T08:01:09.170 に答える