#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня есть скрипт мгновенного поиска в стиле Google, написанный на jQuery, который извлекает результаты из PHP-скрипта. Когда пользователь запрашивает что-либо, его запрос отображается в заголовке страницы как «ЗАПРОС — Мой сценарий поиска», а в URL страницы как #ЗАПРОС. Однако, когда вы удаляете весь текст из окна поиска, # все еще остается в URL, а заголовок гласит » — Мой сценарий поиска». Как я могу сделать так, чтобы после удаления всего содержимого окна поиска скрипт удалял заголовок и #?
Мой код jQuery:
$(document).ready(function(){
$("#search").keyup(function(){
var search=$(this).val();
var query=encodeURIComponent(search);
var yt_url='search.php?q=' query 'amp;category=web';
window.location.hash=query;
document.title=$(this).val() " - My Search Script";
$.ajax({
type:"GET",
url:yt_url,
dataType:"html",
success:function(response){
$("#result").html(response);
}
});
});
});
Ответ №1:
Вы можете привести <title>
в порядок достаточно просто, но вы не сможете последовательно удалять #
из URL после того, как вы установили хэш. Единственный браузер, который, кажется, избавляется от этого, — Firefox.
$(document).ready(function(){
$("#search").keyup(function(){
var search=$(this).val();
var query=encodeURIComponent(search);
var yt_url='search.php?q=' query 'amp;category=web';
window.location.hash=query;
// You may want to use a better title than 'xa0' (blank)
document.title = search=='' ? 'xa0' : search " - My Search Script";
$.ajax({
type:"GET",
url:yt_url,
dataType:"html",
success:function(response){
$("#result").html(response);
}
});
});
});
Комментарии:
1. Возможно, было бы лучше не беспокоиться о запросе ajax, если пользователь не ввел поисковый запрос, как в моем ответе.
2. @Eric: Я знаю, к чему вы клоните, но, возможно,
search.php
скрипт либо не вернет результатов (очень похоже на то, как работает Google Instant, когда поле поиска пустое), либо будет возвращено сообщение с предложением ввести поисковый запрос.
Ответ №2:
Как насчет чего-то подобного:
$(document).ready(function(){
$("#search").keyup(function(){
var search=$(this).val();
var query=encodeURIComponent(search);
var yt_url='search.php?q=' query 'amp;category=web';
$.ajax({
type:"GET",
url:yt_url,
dataType:"html",
success:function(response){
$("#result").html(response);
if (query == "") {
window.location.hash=query;
document.title=$(this).val() " - My Search Script";
} else {
window.location.hash=query;
document.title="My Search Script";
}
}
});
});
});
Изменения, которые я внес, следующие:
- Не обновляйте заголовок и хэш до тех пор, пока не будут загружены новые данные.
- Вести себя иначе, если искомый запрос представляет собой пустую строку.
Комментарии:
1. -1 Это не сработает! Что вы ожидаете
"My Search Script";
делать!?2. Я бы не ожидал, что это что-нибудь сделает! Похоже, я удалил слишком много при попытке отредактировать текст в текстовом поле на сайте. Отредактировано в соответствии с тем, что я намеревался опубликовать, спасибо за дружескую заметку, сообщающую мне о моей ошибке…
3. Не беспокойтесь, я удалил понижающий голос теперь, когда вы это исправили
Ответ №3:
Попробуйте это:
$(document).ready(function() {
$('#search').keyup(function() {
var search = $(this).val();
if(search == '') {
window.location.hash = '';
document.title = 'My Search Script';
$('#result').empty();
}
else {
window.location.hash = encodeURIComponent(search);
document.title = search ' - My Search Script';
$.ajax({
type: 'GET',
url: 'search.php',
data: {q: search, category: 'web'},
dataType: 'html',
success: function(response){
$('#result').html(response);
}
});
}
});
});
Я использовал data
опцию $.ajax
, чтобы вам не нужно было создавать URL самостоятельно.
Я не думаю, что вы можете гарантировать избавление от хэша в URL: некоторые браузеры удаляют его, другие — нет.
Комментарии:
1. Я вижу пару проблем с этим подходом. 1) Изменение хэша при каждом событии ввода добавит большое количество записей в список истории браузера и сделает кнопку «Назад» бесполезной для пользователя. И 2) Когда поиск пуст, я бы ожидал, что содержимое ‘#result’ будет отражать это, а не отображать предыдущие результаты поиска.
2. @vitch: Я не подумал о пункте 1, поскольку OP запросил его при вводе. Хотя это хороший момент. Хорошо замечено во втором пункте, хотя!