Почему форма ввода добавляет «?» при нажатии клавиши enter?

#jquery #forms #input

#jquery #формы #ввод

Вопрос:

Здесь находится мой сайт: При вводе текста в форму ввода поиска страница обновляется и добавляет «?» к URL.

Однако, когда нажата ссылка поиска, все работает нормально. Это действительно поражает мой разум относительно того, почему он добавляет «?», поскольку я нигде не включал этот код. Предполагаемое поведение заключается в том, чтобы щелкнуть ссылку вместо обновления страницы.

 $(document).ready(function() {
    $("#coolIrisSearch").keydown(function(e) {
        if(e.keyCode === 13) {
            $("#searchbutton").click();
            return false;
        }
    });

    doCoolIrisSearch = function() {
        cooliris.embed.setFeedURL( 'http://pipes.yahooapis.com/pipes/pipe.run?Search=' encodeURIComponent($('#coolIrisSearch').val()) '&_id=5f4545ce4062c36e4c5d9a8763b3167e&_render=rss' );
        filter();
    };   
}); 
  

Ок, найден ответ. Поле формы довольно строгое. Вы не можете удалить поле ввода «отправить» и превратить его в ссылку. В противном случае вывод будет выполнять то, что он делал ранее — добавление «?» и атрибута name первого поля ввода. Это правильная версия:

     <form name="searchForm">
    <input type="text" name="coolIrisSearch" id="coolIrisSearch" onfocus="this.value=''" />
    <input type="submit" value="search" onclick="doCoolIrisSearch();return false;" />
    </form>
  

В то время как эта версия приведет к добавлению URL-адреса «?coolIrisSearch=» и перезагрузке страницы.

 <form name="searchForm">
<input type="text" name="coolIrisSearch" id="coolIrisSearch" onfocus="this.value=''" />
</form>
  

Надеюсь, кто-то еще найдет это полезным.

Ответ №1:

Вместо добавления прослушивателей щелчков к кнопкам и ключевых элементов к входным данным, попробуйте просто прослушать submit событие forms.

 $("#searchForm").submit(function() {
    doCoolIrisSearch();
    return false;
});
  

Намного проще.

Редактировать: Я пытался отлаживать ваш код с помощью отличного веб-инспектора Chrome, и кажется, что вы вызываете filter с id иногда, а id иногда и без. Вы можете исправить это, изменив эту строку:

 document.getElementById(id).className  = " active";
  

К этому:

 if(id) {
    document.getElementById(id).className  = " active";
}
  

Комментарии:

1. @UrBestFriend: Часть вашего кода вызывала исключение. Я отредактировал свой ответ, чтобы показать вам, как это исправить.

2. Извините, что сайт отключился, но я обязательно это добавлю. Спасибо!

3. Хорошо, сайт восстановлен. Однако проблема все еще не решена.

4. @UrBestFriend: filter не было исправлено, как я показал, как это сделать.

5. @icktoofay уверен? Я добавил это ко всем функциям фильтра.

Ответ №2:

Это потому, что вы забыли добавить атрибут name к вашему тегу ввода

 <input name='search' type='text' />
  

попробуйте добавить это

Ответ №3:

Один из вариантов — вызвать doCoolIrisSearch() при нажатии клавиши enter, а не вызывать «щелчок» по ссылке

Комментарии:

1. Да, спасибо за это. Но проблема была не в этом. Довольно необычное добавление «?» к URL и перезагрузка. Однако я нашел исправление.