2014-04-02 137 views
0

我對javascript很陌生,無法找到解決以下問題的解決方案。我正在使用一段JavaScript代碼來完成我的(實時)搜索工作(通過ajax)。問題是,當我把它的HTML下面的JavaScript只會工作:Javascript only only below

<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'; 
} 
})); 

我希望有人能幫助我,當我把它之前我的JavaScript代碼也行HTML。提前致謝!

+0

[HTML5的佔位符屬性不是爲標籤元件的替代物](HTTP ://www.456bereastreet.com/archive/201204/the_html5_placeholder_attribute_is_not_a_substitute_for_the_label_element /) – Quentin

回答

4

這是因爲您指的是JavaScript在頂端時尚不存在的HTML。

將代碼包裝在$(document).ready()中。在啓動JavScript之前,瀏覽器等待直到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'; 
    } 
    })); 
}); 

僅供參考,你爲什麼uisng document.getElementById()當你擁有jQuery的提供給你,並且已經在使用它?

+0

感謝您的快速回復!它有效。作爲對您的其他問題的回答,我不知道另一種方式來做到這一點...你也許可以告訴我如何在更多方面做到這一點有道理嗎? –

+0

這段代碼實際上很好,除了最完全不使用jQuery。在這種情況下,只需將對'document.getElementById()'的引用更改爲'$()'。 –

1

如果你在HTML之前放置了那個,那麼你正在試圖添加一個提交事件給一個在JavaScript運行時不存在的表單。

將腳本包裝在函數中,然後將該函數用作ready或load事件的事件處理函數。

將作爲參數jQuery的函數(而不是選擇器,DOM元素或HTML強)傳遞給ready處理程序。

jQuery(bind_form_event_handler); 

function bind_form_event_handler() { 
    $("#filter").submit(function(event) { 
    // etc etc 
} 
1

更改你JavaScript以這個

渦卷與$(函數(){}

這樣

$(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'; 
    } 
    })); 

    })