我是javascript的新手,无法找到我遇到的以下问题的解决方案。我正在使用一段javascript代码来进行我的(实时)搜索工作(通过ajax)。问题是,只有当我把它放在HTML下面时,Javascript才会起作用:
<form action="filter.php" name="filter" method="get" id="filter">
<input type="text" id="search_bar" name="s" placeholder="Type hier je zoekterm..." />
</form>
<ul id="result"></ul>
的Javascript
$("#filter").submit(function(event) {
event.preventDefault();
$("#result").html('');
var values = $(this).serialize();
$.ajax({
url: "tracks_content.php",
type: "get",
data: values,
success: function(data){
$('#result').html(data);
},
});
});
$(this).mouseup(function() {
document.getElementById('result').style.display='none';
});
$("#result").mouseup(function(){
return false;
});
$("#filter").bind('input',(function(event){
var query = document.getElementById('search_bar').value;
if(query!=""){
$("#filter").submit();
document.getElementById('result').style.display='block';
}
else{
$('#result').html('');
document.getElementById('result').style.display='none';
}
}));
我希望当我把它放在HTML之前时,有人可以帮助我使我的Javascript代码也能正常工作。提前谢谢!
答案 0 :(得分:4)
这是因为您指的是当JavaScript位于顶部时尚不存在的HTML。
将您的代码包裹在$( document ).ready()
中。在释放JavScript之前,Thi将浏览器等待,直到加载DOM。
$( document ).ready(function() {
$("#filter").submit(function(event) {
event.preventDefault();
$("#result").html('');
var values = $(this).serialize();
$.ajax({
url: "tracks_content.php",
type: "get",
data: values,
success: function(data){
$('#result').html(data);
},
});
});
$(this).mouseup(function() {
document.getElementById('result').style.display='none';
});
$("#result").mouseup(function(){
return false;
});
$("#filter").bind('input',(function(event){
var query = document.getElementById('search_bar').value;
if(query!=""){
$("#filter").submit();
document.getElementById('result').style.display='block';
}
else{
$('#result').html('');
document.getElementById('result').style.display='none';
}
}));
});
仅供参考,当你有jQuery可用并且已经在使用它时,为什么你会document.getElementById()
?
答案 1 :(得分:1)
如果你把它放在HTML之前,那么你试图将一个提交事件添加到JavaScript运行时不存在的表单中。
将脚本包装在函数中,然后将该函数用作ready或load事件的事件处理程序。
将函数(而不是选择器,DOM元素或HTML强)作为jQuery
的参数传递将绑定为就绪处理程序。
jQuery(bind_form_event_handler);
function bind_form_event_handler() {
$("#filter").submit(function(event) {
// etc etc
}
答案 2 :(得分:1)
将您的javascript更改为此
用$(function(){}
换行 像这样$(function(){
$("#filter").submit(function(event) {
event.preventDefault();
$("#result").html('');
var values = $(this).serialize();
$.ajax({
url: "tracks_content.php",
type: "get",
data: values,
success: function(data){
$('#result').html(data);
},
});
});
$(this).mouseup(function() {
document.getElementById('result').style.display='none';
});
$("#result").mouseup(function(){
return false;
});
$("#filter").bind('input',(function(event){
var query = document.getElementById('search_bar').value;
if(query!=""){
$("#filter").submit();
document.getElementById('result').style.display='block';
}
else{
$('#result').html('');
document.getElementById('result').style.display='none';
}
}));
})