我有一个搜索字段,它允许成员输入客户名称的一部分,并以与 facebook 下拉搜索相同的方式返回结果。不过,我遇到了一些障碍:
- 当文本框被清除或成员单击屏幕上的任何其他位置时,返回的结果不会也被清除并停留在页面上,直到刷新或页面退出。这真的很烦人。
JS代码:
<script type="text/javascript">
$(document).ready(function() {
$("#searchbox").keyup(function() {
var searchbox = $(this).val();
var dataString = 'searchword=' + searchbox;
if (searchbox.length < 3 ) {} else {
$.ajax({
type: "POST",
url: "contact_search/search.php",
data: dataString,
cache: false,
success: function(html) {
$("#display").html(html).show();
}
});
}
return false;
});
});
</script>
HTML
<input type="text" id="searchbox" maxlength="20" />
<div id="display"></div>
搜索.PHP脚本
<?php
if($_POST)
{
$q=$_POST['searchword'];
try {
$db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare("SELECT FNAME, LNAME FROM table WHERE FNAME LIKE ? or LNAME LIKE ? ORDER BY ID LIMIT 5");
$stmt->execute(array('%'.$q.'%', '%'.$q.'%'));
$foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
$db->commit();
}
catch (PDOException $e)
{
echo "There was a system DB error. <br>".$e->getMessage();
}
if(isset($foundrows) && $foundrows == 0) {
echo "<div class='display_box' align='left'>
No matching results found</div>";
} else {
while($row = $stmt->fetch()) {
$fname = $row['FNAME'];
$lname = $row['LNAME'];
$re_fname='<b>'.$q.'</b>';
$re_lname='<b>'.$q.'</b>';
$final_fname = str_ireplace($q, $re_fname, $fname);
$final_lname = str_ireplace($q, $re_lname, $lname);
?>
<a href="123.php" target="mainFrame" style="text-decoration:none; color:#000;">
<div class="display_box" align="left">
<?php echo $final_fname; ?> <?php echo $final_lname; ?><br/>
</div></a>
<?php
}
}
}
?>
有人遇到过这个问题吗?如果该字段为空或在屏幕的任何其他区域发生点击(除了返回的结果),我如何从我的 php 脚本中清除结果?
注意:
我的页面是用 4 个“页面”框架集(顶部、左侧、中心、中间)构建的,所以这个问题比普通问题稍微复杂一些。当我将修复程序放入我的实际源代码(即 php 页面)时,我遇到了几个“由于内容不安全而被阻止”的错误。
具体来说,我的每个 php 页面的标题都有以下代码,以防止在 https 连接之外登录并允许 session :
<?php
session_start();
if( $_SERVER['SERVER_PORT'] == 80) {
header('Location:https://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]);
die();
}
?>
最佳答案
您可以将点击事件附加到每个框架的主体元素,并在那里隐藏结果。框架的 dom 可从 window 对象获得,例如:
window.frames['myframe'].document
如果您需要从框架访问窗口对象,请使用:
window.parent
这样您就可以从任何帧访问结果。唯一烦人的是你需要添加代码来隐藏所有帧中的结果。
希望对您有所帮助。
J.
编辑:
澄清一下。如果你想在其中一个框架中隐藏一个 div,你需要在页面的每个框架中都有隐藏代码。假设您的页面有两个框架:搜索结果所在的“mainFrame”和“searchFrame”。
在'mainFrame'中你会有这样的代码:
$(document).click(function() {
// second parameter sets the context for the selector
$("#display", window.parent.frames['searchFrame'].document).hide();
})
在“searchFrame”中:
$(document).click(function() {
$("#display").hide();
})
关于php - 从 Jquery 、 PHP 、 MySQL 字段返回的清除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088346/