我正在使用Opencart v2.2.0。搜索框是自動完成的,該部分沒有問題。但是現在,我需要在搜索框中輸入字母時加粗。在搜索框中鍵入結果字母加粗
例子: 用戶開始輸入 「一些」,併爲他的類型,結果是:
一些事情
敬畏一些
等
注意:「something」和「awesome」這些詞僅僅是一個例子,實時我不知道用戶輸入什麼搜索詞。
到目前爲止,我有這個代碼,但由於我不是一個真正的js/jquery專家,我需要幫助實現上層請求。謝謝你們。
//<![CDATA[
function doLiveSearch(ev, keywords) {
if(ev.keyCode == 38 || ev.keyCode == 40) {
return false;
}
$('#autosearch_search_results').remove();
updown = -1;
if(keywords == '' || keywords.length < 2) {
return false;
}
keywords = encodeURI(keywords);
$.ajax({url: $('base').attr('href') + 'index.php?route=module/autosearch/ajax_asr&keyword=' + keywords, dataType: 'json', success: function(result) {
if(result.length > 0) {
var eList = document.createElement('ul');
eList.id = 'autosearch_search_results';
var eListElem;
var eLink;
var eImage;
for(var i in result) {
eListElem = document.createElement('li');
eLink = document.createElement('a');
if((result[i].thumb) != '')
{
eImage = document.createElement('img');
eImage.src = result[i].thumb;
eLink.appendChild(eImage);
}
// name
var el_span = document.createElement('name');
var textNode = document.createTextNode(result[i].name);
eLink.appendChild(el_span);
el_span.appendChild(textNode);
// model
if((result[i].model) != '')
{
var el_span = document.createElement('model');
var textNode = document.createTextNode(result[i].model);
eLink.appendChild(el_span);
el_span.appendChild(textNode);
}
if(typeof(result[i].href) != 'undefined') {
eLink.href = result[i].href;
}
else {
eLink.href = $('base').attr('href') + 'index.php?route=product/product&product_id=' + result[i].product_id + '&keyword=' + keywords;
}
eListElem.appendChild(eLink);
if((result[i].price) != '')
{
var br = document.createElement("br");
eLink.appendChild(br);
// special price
if((result[i].special) != '')
{
var el_span = document.createElement('special-price');
var textNode = document.createTextNode(result[i].special);
eLink.appendChild(el_span);
el_span.appendChild(textNode);
}
// price
var el_span = document.createElement('price');
var textNode = document.createTextNode(result[i].price);
eLink.appendChild(el_span);
el_span.appendChild(textNode);
}
// quantity/stock
if((result[i].stock) != '')
{
var br = document.createElement("br");
eLink.appendChild(br);
eLink.appendChild(document.createTextNode(result[i].stock));
}
eList.appendChild(eListElem);
}
if($('#autosearch_search_results').length > 0) {
$('#autosearch_search_results').remove();
}
//view all results
if((result[i].viewall) != '')
{
eListElem = document.createElement('li');
eLink = document.createElement('a');
var el_span = document.createElement('viewall');
var textNode = document.createTextNode(result[i].viewall);
eLink.appendChild(el_span);
el_span.appendChild(textNode);
eLink.href = $('base').attr('href') + 'index.php?route=product/search&search=' + keywords;
eListElem.appendChild(eLink);
eList.appendChild(eListElem);
}
$('#search').append(eList);
}
}});
return true;
}
function upDownEvent(ev) {
var elem = document.getElementById('autosearch_search_results');
var fkey = $('#search').find('[name=search]').first();
if(elem) {
var length = elem.childNodes.length - 1;
if(updown != -1 && typeof(elem.childNodes[updown]) != 'undefined') {
$(elem.childNodes[updown]).removeClass('highlighted');
}
// Up
if(ev.keyCode == 38) {
updown = (updown > 0) ? --updown : updown;
}
else if(ev.keyCode == 40) {
updown = (updown < length) ? ++updown : updown;
}
if(updown >= 0 && updown <= length) {
$(elem.childNodes[updown]).addClass('highlighted');
var text = elem.childNodes[updown].childNodes[0].text;
if(typeof(text) == 'undefined') {
text = elem.childNodes[updown].childNodes[0].innerText;
}
}
}
return false;
}
var updown = -1;
$(document).ready(function(){
$('#search').find('[name=search]').attr('autocomplete', 'off'); //disable autocomplete
$('#search').find('[name=search]').first().keyup(function(ev){
doLiveSearch(ev, this.value);
}).focus(function(ev){
doLiveSearch(ev, this.value);
}).keydown(function(ev){
upDownEvent(ev);
}).blur(function(){
window.setTimeout("$('#autosearch_search_results').remove();updown=0;", 1500);
});
$(document).bind('keydown', function(ev) {
try {
if(ev.keyCode == 13 && $('.highlighted').length > 0) {
document.location.href = $('.highlighted').find('a').first().attr('href');
}
}
catch(e) {}
});
});
//]]>
thanx您的回覆。我不確定我是否按照你的指示。我將這個函數添加到upper.js文件,然後呢? – Nancy
我不知道用戶輸入什麼文本,這只是一個示例,向您展示用戶開始輸入(任意)搜索詞時應發生的情況。 – Nancy
正確,但是用戶在搜索查詢中鍵入了您現在所做的查詢不是嗎?你通過ajax發送這個查詢到你的服務器來獲取結果(在你的情況下,我猜它是「關鍵字」)。對於每一個你添加的textNode(每次你在結果html中添加文本),你都要通過這個函數來運行它,而不是document.createTextNode(result [i] .name)來執行document.createTextNode(highlightQuery(result [i])。 name)) –