我正在使用jQuery从php类加载搜索结果,当用户输入搜索词时。问题是,当用户输入搜索关键字并通过ajax在同一页面上从类文件加载结果时,jQuery不执行所需的功能。
我想做的是,当搜索结果加载到主页面上时,它只应该显示引用和作者,而不是阿拉伯语和参考资料。当用户单击“引用”时,它应该像手风琴一样工作,切换阿拉伯语和参考的div容器。
然而,虽然jQuery在从类文件加载结果方面表现出色,但它不会隐藏阿拉伯语和参考容器,也不会在用户单击引用以显示容器时运行点击事件,正如firebug所显示的那样。
index.php:
我想做的是,当搜索结果加载到主页面上时,它只应该显示引用和作者,而不是阿拉伯语和参考资料。当用户单击“引用”时,它应该像手风琴一样工作,切换阿拉伯语和参考的div容器。
然而,虽然jQuery在从类文件加载结果方面表现出色,但它不会隐藏阿拉伯语和参考容器,也不会在用户单击引用以显示容器时运行点击事件,正如firebug所显示的那样。
index.php:
<script type="text/javascript">
$(function() {
$(".bsearch")
.keydown(function() {
//create post data
var postData = {
"search" : $(this).val()
};
//make the call
$.ajax({
type: "POST",
url: "quotes_in.php",
data: postData, //send it along with your call
success: function(response){
$("#left").html(response);
}
});
}),
$("div#smore").hide();
//toggle the componenet with class msg_body
$("p#s_quotes").click(function()
{
$(this).next("div#smore").slideToggle(200);
}),
});
</script>
<!-- Begin Left Column -->
<div id="left">
</div>
<!-- End Left Column -->
Quotes_in.php:
include_once "inc/class.quotes.inc.php";
$quotes = new Quotes($db);
if (isset($_POST['search']))
$quotes->searchQuotes();
格式化搜索的类文件中的函数:
---SQL QUERY for SEARCH---
public function formatSearch($row, $search)
{
return "<div class=\"swrap\">"
. "<p id=\"s_quotes\"> " . $cQuote . " </p>"
. "<div id=\"smore\"><p id=\"s_arabic\">" . $this->h($row['cArabic']) . "</p>"
. "<p id=\"s_reference\"><span class=\"source\">Source:</span> " . $this->h($row['vReference']) . "</p></div>"
. "<p id=\"s_author\"><b>-</b> " . $this->h($row['vAuthor']) . "</p></div>";
}
.live()
不会监听新元素或应用处理程序,它以完全不同的方式工作,请参阅我的答案进行简要描述。 - Nick Craverdocument
附加一个事件处理程序,这是正确的。它不会以任何方式查找新元素并附加处理程序。 - Nick Craver.live()
产生不同的影响,例如在事件到达document
之前停止事件的任何内容,还有几个可能很重要的区别。你所想的是.live()
之前的.livequery()
插件,它确实会寻找新元素并附加处理程序。 - Nick Craverlive()
描述为“为所有与当前选择器匹配的元素附加一个处理程序,现在或将来。”对于初学者来说,这比实际实现更容易理解live()
的功能。 - Ryan Brunner