2016-12-01 2 views
-1

Я пытаюсь понять, почему моя функция запуска submit (searchBtn) работает некорректно. Если у вас есть идея о том, что происходит не так, я был бы признателен за помощь!Введите ключ для поиска не работает

$(document).ready(function() { 

    //Click searchbtn and run our search 

    $('#searchBtn').click(function() { 
    // Get value of our searchbar that user inputs 
    var searchInput = $('#searchInput').val(); 
    //reset our textbox when search is called 
    $('#searchInput').val(''); 
    //set our search url with the API and searchInput 
    var url = "https://en.wikipedia.org/w/api.php?action=opensearch&search=" + searchInput + "&format=json&callback=?"; 

     $.ajax({ 
     data: "GET", 
     url: url, 
     async: false, 
     dataType: "JSON", 
     success: function(data) { 

      $('#output').html(''); 
      for (let i = 0; i < data[1].length; i += 1) { 
      $('#output').append("<li><a href=" + data[3][i] + ">" + data[1][i] + "</a><p>" + data[2][0] + "</p></li>"); 
      } 

     }, 
     error: function(errorMessage) { 
      alert("There was a problem retrieving your results."); 
     } 
    }) 

Это функция запуска функции щелчка при отпускании клавиши ввода. Он появляется сразу после примера кода выше.

$('#searchInput').keyup(function(event) { 
     if (event.which === 13) { 
      $('#searchBtn').click(); 
     } 
    }); 
    }); 
}); 
+0

удалите события нажатия и нажатия клавиш и привяжите к событию отправки формы. –

+2

'var searchBtn = '#searchBtn'; '?? – Mahi

+0

«Не работает правильно» не работает как? Вы проверили консоль на наличие ошибок? Каков ожидаемый результат и что происходит вместо этого? – empiric

ответ

1

Так я бы это сделал, он удаляет программный щелчок и просто запускает функцию.

$(document).ready(function() { 

    //Click searchbtn and run our search 

    function search() { 
    // Get value of our searchbar that user inputs 
    var searchInput = $('#searchInput').val(); 
    //reset our textbox when search is called 
    $('#searchInput').val(''); 
    //set our search url with the API and searchInput 
    var url = "https://en.wikipedia.org/w/api.php?action=opensearch&search=" + searchInput + "&format=json&callback=?"; 

     $.ajax({ 
     data: "GET", 
     url: url, 
     async: false, 
     dataType: "JSON", 
     success: function(data) { 

      $('#output').html(''); 
      for (let i = 0; i < data[1].length; i += 1) { 
      $('#output').append("<li><a href=" + data[3][i] + ">" + data[1][i] + "</a><p>" + data[2][0] + "</p></li>"); 
      } 

     }, 
     error: function(errorMessage) { 
      alert("There was a problem retrieving your results."); 
     } 
    } 

$('#searchBtn').click(search); 
$('#searchInput').keyup(function(event) { 
    if (event.which === 13) { 
     search(); 
    } 
}); 
}); 
+0

Это выглядит намного лучше, но при нажатии клавиши ввода он все равно не запускается. Я все еще могу получить доступ к вызову ajax при нажатии кнопки отправки @SethWhite –

+0

Интересно ... у вас есть другие события, которые собирают нажатия клавиш? И эти события называют что-то вроде preventDefault()? Отбросьте консольный журнал в обратном вызове функции keyup и посмотрите, даже ли он вызван. Если это не так, что-то перехватывает ваше событие keyup. – SethWhite

+1

Вот что такое странно. Ничто не должно мешать ему быть вызванным, но я утешил его, и ничего не было напечатано. Я даже написал ваш код и прокомментировал мой, и ничего не изменилось. Это код, поэтому, если вы хотите его проверить, он находится по адресу http://codepen.io/JonLangel/pen/JbJddX –

1

решаемые с помощью @SethWhite и некоторые люди из/г/learnprogramming со следующим кодом:

$(document).ready(function() { 
    //Click searchbtn and run our search 

    function search() { 
    // Get value of our searchbar that user inputs 
    var searchInput = $('#searchInput').val(); 

    //reset our textbox when search is called 
    $('#searchInput').val(''); 
    //set our search url with the API and searchInput 
    var url = "https://en.wikipedia.org/w/api.php?action=opensearch&search=" + searchInput + "&format=json&callback=?"; 

     $.ajax({ 
     data: "GET", 
     url: url, 
     async: false, 
     dataType: "JSON", 
     success: function(data) { 

      $('#output').html('').addClass('animated slideInUp'); 

      for (let i = 0; i < 5; i += 1) { 
      $('#output').append("<li><a href=" + data[3][i] + ">" + data[1][i] + "</a><p>" + data[2][i] + "</p></li>"); 
      } 

     }, 
     error: function(errorMessage) { 
      alert("There was a problem retrieving your results."); 
     } 
    }) 
    $('#output').removeClass(); 
    } 
    $('#searchBtn').click(function(event) { 
     event.preventDefault(); 
     search(); 
    }); 
    $('#searchInput').keypress(function(event) { 
    if (event.which == 13) { 
     event.preventDefault(); 
     search(); 
    } 
    }); 
}); 

Использование event.preventDefault(); позаботится об этом, поскольку каждый раз, когда вызывается ajax, мы сбрасываем #seachInput с '', заставляя форму ввода уведомлять вас о пустой форме.