【发布时间】:2017-12-31 14:21:19
【问题描述】:
我有一个我自己无法解决的问题。我使用 ajax 进行了搜索输入,在输入时会提示结果。该脚本可以在 Firefox 上正常工作,但是当我在 chrome 上使用它时,输入字段在键入时会失去焦点。
代码如下:
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert("Please update your Browser");
}
}
//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
if (searchReq.readyState == 4 || searchReq.readyState == 0) {
var str = encodeURI(document.getElementById('campo-search-
modal
').value);
searchReq.open("GET", 'https://mywebsite.com/search.php?search=' + str, true);
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
}
}
//Called when the AJAX response is returned.
function handleSearchSuggest() {
if (searchReq.readyState == 4) {
var ss = document.getElementById('cont-list-re-search')
ss.innerHTML = '';
if (document.getElementById('campo-search-modal').value.length > 2) {
var str = searchReq.responseText.split("\n");
for (i = 0; i < str.length - 1; i++) {
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<li ';
suggest += 'class="suggest_link">' + str[i] + '</li>';
ss.innerHTML += suggest;
}
}
else {
ss.innerHTML = 'Perfavore inserire almeno 3 caratteri!';
}
}
}
//Mouse over function
function suggestOver(div_value) {
div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
document.getElementById('campo-search-modal').value = value;
document.getElementById('cont-list-re-search').innerHTML = '';
}
HTML 代码:
<form>
<div class="form-group row row-camp-search">
<div class="col-5">
<input class="form-control modal-search" type="search" id="campo-search-
modal" placeholder="Ricerca Nel Sito..." onKeyUp="searchSuggest();">
</div>
</div>
</form>
<div id="result-search">
<ul id="cont-list-re-search">
</ul>
输入中的使用类型,并进行了ajax调用。我没有包含 php 搜索页面,因为只有对数据库的查询和用于打印结果的圆圈。
奇怪的是,该脚本在 Firefox 上运行良好,但在 Google Chrome 上使用时,输入字段失去焦点。即使在第一封信之后。
PHP:
$search = $_GET["search"];
if(!empty($search))
{
try {
$connes = new PDO("mysql:host=$DB_HOST;dbname=$DB_NAME", $DB_USER,
$DB_PASS);
$connes->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmtb = $connes->prepare("SELECT * FROM table WHERE col like('%" .
simple_protect($search) . "%') ORDER BY col LIMIT 2");
$stmtb->execute();
$resulta = $stmtb->fetchAll();
}
catch(PDOException $b) {
echo "Error: " . $b->getMessage();
}
$connes = null;
if($resulta && count($resulta) > 0)
{
foreach($resulta as $key => $row)
{
echo '<a href="https://website.com/scheda/index.php?
dettagli='.strip_all($row['nome']).'"><div class="img-res-search"
style="background-image:url(https://website.com/img/miniature/min-
'.strip_all($row['icona']).')"></div><div class="tit-res-
search">'.strip_all($row['nome']).'</div></a><div class="dett-res-search">
<div class="dett1-res-search"><i class="fa fa-star" aria-hidden="true">
</i>'.strip_all($row['voto']).'</div><div class="dett2-res-search">
<i class="fa fa-flag" aria-hidden="true"></i>Section</div></div>'."\n";
}}
}
else
{
echo "Nessun Risultato!";
}
【问题讨论】:
-
您发布的代码基本上是无关紧要的(除了您使用 jQuery 标记此 Q 的事实,这会将代码缩短到一小部分,但不使用它)。您需要提供minimal reproducible example
-
您在此处共享的代码还不够。进一步,jquery代码在哪里?
-
已用完整代码编辑,希望对您有所帮助。抱歉,这是我第一次使用 stackoverflow :(
-
您似乎在错误的函数中测试了字段的长度。
function searchSuggest() { var val = document.getElementById('campo-search- modal').value; if (val.length>2) { searchReq.open("GET", 'https://mywebsite.com/search.php?search=' + encodeURIComponent(str), true); ...
标签: php ajax google-chrome