2015-04-05 27 views
1

我有一个搜索建议的形式,显示为用户键入输入。现在这个搜索建议是可点击的,用户可以点击一个特定的项目。当它点击它时,将它们带到类似于searchPage.php的地方?user_query =被点击的项目的文本(即searchPage.php?user_query = html)。考虑到在搜索中的特殊字符

我注意到的是,如果在搜索建议项目有被称为ASCII ISO特殊字符8859-1会忽略它,因此结果将是searchPage.php?USER_QUERY =

在任何情况下它可以是空白的,因为如果你点击一个项目然后它填充整个列表,它的设计就会很糟糕。

下面是搜索建议JS:

$(function(){ 
$(".search").keyup(function() 
{ 
var searchid = $(this).val(); 
var dataString = 'search='+ searchid; 
if(searchid!='') 
{ 
    $.ajax({ 
    type: "POST", 
    url: "search.php", 
    data: dataString, 
    cache: false, 
    success: function(html) 
    { 
    $("#result").html(html).show(); 
    } 
    }); 
}return false;  
}); 

jQuery("#result").live("click",function(e){ 
    var $clicked = $(e.target); 
    var $name = $clicked.find('.name').html(); 
    var decoded = $("<div/>").html($name).text(); 
    window.open('searchPage.php?user_query=' + decoded,'_self',false); 

    $('#searchid').val(decoded); 
}); 
jQuery(document).live("click", function(e) { 
    var $clicked = $(e.target); 
    if (! $clicked.hasClass("search")){ 
     var $name = $clicked.find('.name').html(); 
    var decoded = $("<div/>").html($name).text(); 

    } 
}); 
$('#searchid').click(function(){ 
    jQuery("#result").fadeIn(); 
}); 
}); 

下面的形式:

<form method="get" action="searchPage.php" enctype="multipart/form-data" autocomplete="off"> 
<input type="text" class="search" id="searchid" name="user_query" id="searchBar" placeholder="Search for courses" /> 
      <input type="submit" id="searchButton" name="search" value="search" class="btn btn-danger" autocomplete="off"/> 

     <div id="result"></div> 

</form> 
+0

“ASCII更换

var decoded = $("<div/>").html($name).text(); 

ISO 8859-1“是西方大部分地区使用的标准拉丁字符集。你能提供一个JSFiddle吗?见http://en.m.wikipedia.org/wiki/ISO/IEC_8859-1 – dartonw 2015-04-05 20:35:50

+0

你的问题是什么;为什么字段是空白的?如何禁止空查询? – chris85 2015-04-05 20:56:09

+0

这可能是您的文档,表单或此过程的另一部分不使用ISO 8859-1,而是另一种编码。为了使它工作,你必须在任何地方都有相同的编码。即使这样,我也会在任何地方使用UTF-8,因为它支持最广泛的字符而不需要转义它们。 – GolezTrol 2015-04-05 21:04:53

回答

0

首先,如GolezTrol评论,我会在任何地方使用UTF-8:这是recommendend最可靠的方法以避免像你的问题。

然后,在你这里的特殊情况下,可以尝试通过

var decoded = encodeURIComponent($("<div/>").html($name).text()); 

(没有绝对的把握,它工作正常...)

+0

感谢您的建议。我将如何在任何地方使用UTF8? – John 2015-04-05 21:39:36

+0

无处不在使用UTF8:就是说您的HTML部分已经以UTF8格式。换句话说,您的.html(或.php及其他)源文件应该是UTF8编码(不含BOM),而不是ANSI,而ANSI通常是许多编辑器的默认编码。例如:如果您使用的是Notepad ++,您可以打开文件并从菜单中选择“编码|转换为UTF-8(不带BPM)”并保存。那么你的JS片段现在应该可以正常工作。 – cFreed 2015-04-05 22:23:48