【发布时间】:2016-05-07 09:59:57
【问题描述】:
我有一个 ajax 自动完成功能,它返回用户的全名。但是,当某些名称或值相同的情况下,它不会返回正确的值。相反,它返回下拉列表中的第一个值。即使它有 4 次相同的出现,它仍然返回第一个值。
当我点击史坦尼斯·艾林·拜拉席恩时,它会返回史坦尼斯·坦格利安·拜拉席恩。
这是我的 php 代码(sql/php 代码;ad.php):
<?php
include('config.php');
if($_POST)
{
if($_POST['search_keyword'])
{
$similar = mysql_real_escape_string($_POST['search_keyword']);
$result=mysqli_query($conn, "SELECT * FROM person WHERE (firstName like '" . $_POST["search_keyword"] . "%' OR lastName like '" . $_POST["search_keyword"] . "%') AND residentOrNot = 'Yes' ");
if (mysqli_num_rows($result) > 0) {
while($row=mysqli_fetch_array($result))
{
//$name = $row['fullname'];
//$copiedname = $row['fullname'];
//$b_name= '<strong>'.$similar.'</strong>';
//$final_name = str_ireplace($similar, $b_name, $name);
?>
<div class="show" align="left">
<span class="returnName"><?php echo $row["firstName"].' '.$row["middleName"].' '.$row["lastName"]; ?></span>
<span class="returnID" style="display:none"><?php echo $row['idPerson'];?></span>
</div>
<?php
}
}
else {
?>
<div class="show" align="left">
<span class="returnMessage">No matching records found.</span>
</div>
<?php
}
}
mysqli_close($conn);
}
?>
HTML 输入表单:
<form method="post" action="try.php" name="try">
<div class='web'>
<input type="text" class="search_keyword" id="search_keyword_id" placeholder="Search" />
<input type="hidden" name="resID" id="resID"/>
<div id="result"></div>
<input type="submit" name="try" value="Submit">
</div>
AJAX/JS/JQUERY CODE(我认为这就是问题所在):
<script type="text/javascript">
$(function(){
$(".search_keyword").keyup(function()
{
var search_keyword_value = $(this).val();
var dataString = 'search_keyword='+ search_keyword_value;
if(search_keyword_value!='')
{
$.ajax({
type: "POST",
url: "ad.php",
data: dataString,
cache: false,
success: function(html)
{
$("#result").html(html).show();
}
});
}
return false;
});
jQuery("#result").on("click", function(e)
{
/*var $clicked = $(e.target);
var $name = $clicked.find('.returnName').html();
var decoded = $("<div/>").html($name).text();
$('#search_keyword_id').val(decoded);
var $clicked = $(e.target);
var $id = $clicked.find('.returnID').html();
var id = $("<div/>").html($id).text();
$('#resID').val(id);
*/
$name = $('span.returnName',this).html();
$name = $("<div/>").html($name).text().toString();
$('#search_keyword_id').val($name);
$id = $('span.returnID',this).html();
$id = $("<div/>").html($id).text().toString();
$('#resID').val($id);
});
jQuery(document).on("click", function(e) {
var $clicked = $(e.target);
if (! $clicked.hasClass("search_keyword")){
jQuery("#result").hide();
}
});
});
</script>
即使我单击第二个或第三个或第四个值,它也确实返回第一个值。我的代码哪里出错了?请帮我。非常感谢!
【问题讨论】:
-
您正在尝试重新发明轮子...似乎问题出在
("#result").on("click"方法上...检查一下:) -
我已经调查过了。但我似乎无法修复它......
-
仅供测试;你可以用这个代码替换你的方法吗:
jQuery("#result").on("click",".returnName" function(e) { $name = $(this).html(); $('#resID').val($name); }); -
尝试了您的代码,它返回了实际的 div 代码... :(
-
所以它返回的是点击跨度的html,对吧?..记住这是为了测试是否返回点击跨度的html...
标签: javascript php jquery ajax autocomplete