Я столкнулся с проблемой. У меня есть этот простой html-код.
<form name="myform" method="POST" action="">
<div>
<p>
<input id="query" type="text" size ="60" title="Enter your search string here." style="font-size:12px;" />
<input id="startSearch" type="button" value="Search Resource" />
</p>
</div>
<div id="pageContents" >
</div>
</form>
и я использую этот код JQuery для запуска моей программы
$(document).ready(function() {
$('#query').keypress(function(e) {
if (e.keyCode == '13') {
alert( 'enter key is pressed ');
$('#startSearch').click();
}
});
$('#startSearch').click(function() {
query = $('#query').val();
model = $('input:radio[name="model"]:checked').val();
if(model=='combined'){
$('#pageContents').load('combinedsearch.jsp?q='+encodeURIComponent(query)+'&m='+model);
} else {
$('#pageContents').load('search.jsp?q='+encodeURIComponent(query)+'&m='+model);
}
});
});
проблема: $('#startSearch').click(function()
работает хорошо, когда кто-то нажимает кнопку поиска, но $('#query').keypress(function(e))
фиксирует событие и обрабатывает мой код, но никогда не показывает результаты возвращаются в браузер. Я думаю, что функция загрузки не работает внутри $('#query').keypress(function(e))
.
Вы слишком много делаете;) Это форма, и ее "главное событие" - это submit
которое происходит, когда кто-то нажимает "вводить" или нажимает кнопку отправки. Таким образом, ваш HTML должен выглядеть так:
<form id="myform">
<input id="query">
<input type="submit" value="Search Resource" />
</form>
и ваш JS:
$(function(){
// DOM ready
$('#myform').on('submit', function(e){
e.preventDefault();
// Your search code
// ...
});
});
Вам необходимо предотвратить действие по умолчанию отправки формы при нажатии Enter.
$('#query').keypress(function(e) {
if (e.keyCode == '13') {
e.preventDefault();
alert( 'enter key is pressed ');
$('#startSearch').click();
}
});
Я бы не использовал keypress. Используйте keydown
или keyup
.
Как указано в jquery api:
Примечание. Поскольку событие нажатия клавиш не покрывается какой-либо официальной спецификацией, фактическое поведение, возникающее при его использовании, может различаться в разных браузерах, версиях браузеров и платформах.
По моей скрипке это работает так, как ожидалось: http://jsfiddle.net/65HSm/
HTML:
<div id="pageContents"></div>
<input type="text" id="query">
<input type="button" id="startSearch" value="search">
JS:
$(document).ready(function () {
$('#query').keypress(function (e) {
if (e.keyCode == '13') {
alert('enter key is pressed ');
$('#startSearch').click();
}
});
$('#startSearch').click(function () {
query = $('#query').val();
model = $('input:radio[name="model"]:checked').val();
if (model == 'combined') {
console.log('load 1');
console.log(query);
$('#pageContents').load('combinedsearch.jsp?q=' + encodeURIComponent(query) + '&m=' + model);
} else {
console.log('load 2');
console.log(query);
$('#pageContents').load('search.jsp?q=' + encodeURIComponent(query) + '&m=' + model);
}
});
});
alert()
в обработчикclick
, он отображается?