2017-05-05 76 views
1

我是新來的JavaScript。通行證搜索框的文本作爲查詢參數

當用戶輸入任何文字或者如果他點擊搜索圖標,我需要得到搜索文本價值,並通過該值作爲查詢參數,並將其重定向到搜索結果頁面。這裏

的問題是,當頁面加載得到直接重定向到搜索結果頁面,而無需輸入任何文字。你能讓我知道我做錯了什麼嗎?

http://localhost:3000/search/searchresults.html?query=&filter=newsroom&site=allsite_all&ei=r1_search 

// Only run function if the newssearch search field exists 
 
if ($('#search_banner-q_newsroom').length >= 1) { 
 
    $("#search_banner-q_newsroom").on('keypress', setupNewsroomSearch()); 
 
} 
 

 
function setupNewsroomSearch() { 
 
    var tracking; 
 
    if ($(".self-service-search").length > 0) { 
 
    tracking = "&ei=r2_pt_search"; 
 
    } else { 
 
    tracking = "&ei=r1_search"; 
 
    } 
 
    redirectToSearchPage($("#search_banner-q_newsroom").val(), "newsroom", "site_all", tracking); 
 
}
<form class="search_box_wrapper"> 
 
    <div class="search-box"> 
 
    <input type="text" id="search_banner-q_newsroom" aria-label="Search" name="query" placeholder="Search" /> 
 
    <i class="icon-magnifying-glass search_desktop-newsroom-submit"></i> 
 
    </div> 
 
</form>

回答

1

的問題是,因爲你的負荷立即調用setupNewsroomSearch()功能,並提供它的返回值爲keypress處理程序。相反,你需要給事件處理函數的參考,像這樣:

$("#search_banner-q_newsroom").on('keypress', setupNewsroomSearch); // Note:() removed 

還要注意的是if說法是多餘的。 jQuery容忍在不匹配元素的jQuery對象上調用函數。這裏有一個你的JS邏輯整潔的版本:

$("#search_banner-q_newsroom").on('keypress', setupNewsroomSearch); 

function setupNewsroomSearch() { 
    var tracking = $(".self-service-search").length > 0 ? '&ei=r2_pt_search' : '&ei=r1_search'; 
    redirectToSearchPage($(this).val(), 'newsroom', 'site_all', tracking); 
} 
+0

它的工作謝謝!但是,當用戶點擊搜索圖標時,我需要調用相同的函數,例如'$(「#search_banner-q_newsroom」)on('keyenter',setupNewsroomSearch); ('。search_desktop-newsroom-submit')。on('click',setupNewsroomSearch)'有沒有更好的方法來做到這一點? –

+0

都能跟得上 - 這是做 –

+0

的最佳方式,我面對的另一個問題,當我科印任何文字立即重定向到搜索頁面。它應該只在按回車後重定向。我嘗試用keyenter但不工作 –