2015-04-05 2 views
1

У меня есть форма с предложением поиска, которое отображается как пользовательский тип ввода. Теперь это предложение поиска можно щелкнуть, где пользователи могут щелкнуть по определенному элементу. когда этот элемент нажимает, он принимает их к чему-то вроде searchPage.php? user_query = текст элемента, который был нажат (то есть searchPage.php? user_query = html).Принимая во внимание специальные символы в поиске

Что я замечаю, что если элемент поиска предложение имеет особый характер, известный как ASCII ISO 8859-1 символов будет игнорировать его, и, следовательно, результат будет searchPage.php? USER_QUERY =

ни при каких обстоятельствах может ли он быть пустым, потому что его плохая конструкция, если вы нажмете на элемент, а затем заполнит весь список.

Ниже поисковое внушение ЯШ:

$(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 ISO 8859-1 "является стандартным набором латинских символов, используемых в большинстве западных стран мира. Можете ли вы предоставить JSFiddle? См. Http://en.m.wikipedia.org/wiki/ISO/IEC_8859-1 – dartonw

+0

Каков ваш вопрос; Почему поле пустое? Как запретить пустые запросы? – chris85

+0

Возможно, ваш документ, ваша форма или другая часть этого процесса не использует ISO 8859-1, а другую кодировку. Чтобы заставить его работать, вам придется иметь одинаковую кодировку везде. И даже тогда я буду использовать UTF-8 везде, потому что он поддерживает самый широкий диапазон символов без необходимости их преодоления. – GolezTrol

ответ

0

Сначала, как прокомментировал GolezTrol, я бы использовал UTF8 везде: это Рекомендуемое самый надежный способ чтобы избежать любых проблем, подобных вашим.

Тогда, в данном конкретном случае у вас есть здесь, вы можете попробовать заменить

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

по

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

(не совсем уверен, что это работает отлично ...)

+0

за ваш совет. Как использовать UTF8 везде? – John

+0

Используйте UTF8 везде: в смысле наличия вашей части HTML уже в UTF8. Другими словами, ваш .html (или .php и другие) исходный файл должен быть кодирован в формате UTF8 (без спецификации), а не ANSI, который часто является кодировкой по умолчанию для многих редакторов. Пример: если вы используете Notepad ++, вы можете открыть свой файл и выбрать «Кодирование | Преобразование в UTF-8 (без BPM)» в меню и сохранить его. Тогда ваш JS-фрагмент теперь должен работать нормально. – cFreed

Смежные вопросы