2016-01-20 3 views
0

Я не могу понять, почему .getJSON выдает ошибку, когда вызов родительской функции выполняется с помощью условного оператора. Когда оператор if закомментирован, проблема не возникает, и вызывается вызов .getJSON. Тем не менее, я хочу, чтобы пользователь заполнил их ввод (указанный нажатием enter).

HTML-

<div class="text-center searchBar"> 
    <form action=""> 
    <input type="text" id="searchText" /> 
    </form> 
</div> 

<div class="container displayResults"> </div> 

Javascript:

$(document).ready(function() { 
    $('#searchText').keyup(function(e) { 
    var searchItem = $('#searchText').val(); 
    var link = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&exlimit=max&inprop=url&generator=search&gsroffset=&format=json&formatversion=2&callback=?&gsrsearch=' + searchItem; 

    if(e.which == 13) { //if user returns enter key 
     wikiCall(link); 
    }  
    }); 
}); 

function wikiCall(wikiLink) { 
    $.getJSON(wikiLink, function(searchResults) {  
    for (var i = 0; i < searchResults.query.pages.length; i++) { 
     $(".displayResults").append("<div class='searchResultsContainer'><span style='font-weight:bold; font-size:150%; margin-bottom:100px;'>" + searchResults.query.pages[i].title + "</span><br></br>" + searchResults.query.pages[i].extract + "</div>"); 
     $(".displayResults").append("<br>"); 
    } 
    }).fail(function(jqxhr,textStatus,error){ 
    alert(textStatus+": "+error); 
    }); 
} 
+3

Какая ошибка ..? – fzxt

+2

Возможно, вы захотите отключить событие отправки формы. '' '$ ('. searchBar form'). on ('submit', function (e) {e.preventDefault(); return false;});' '', чтобы избежать отправки формы при нажатии пользователем. Также проверьте, имеет ли ответ ключ '' 'query''' перед добавлением данных в тело. – LucasFerreira

+1

@ LucasFerreira Спасибо, избегая отправки формы при нажатии кнопки, сделал трюк. – CodingerSK

ответ

2

Я проверил свое программное обеспечение, и я получаю только одна ошибка: KeyUp вместо нажатия клавиши плюс остановить распространение.

В следующем коде:

function wikiCall(wikiLink) { 
 
    $.getJSON(wikiLink, function(searchResults) { 
 
    for (var i = 0; i < searchResults.query.pages.length; i++) { 
 
     $(".displayResults").append("<div class='searchResultsContainer'><span style='font-weight:bold; font-size:150%; margin-bottom:100px;'>" + searchResults.query.pages[i].title + "</span><br></br>" + searchResults.query.pages[i].extract + "</div>"); 
 
     $(".displayResults").append("<br>"); 
 
    } 
 
    }).fail(function(jqxhr,textStatus,error){ 
 
    alert(textStatus+": "+error); 
 
    }); 
 
} 
 
$(function() { 
 
    $('#searchText').keypress(function(e) { 
 
    var searchItem = $('#searchText').val(); 
 
    var link = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&exlimit=max&inprop=url&generator=search&gsroffset=&format=json&formatversion=2&callback=?&gsrsearch=' + searchItem; 
 

 
    if(e.which == 13) { //if user returns enter key 
 
     wikiCall(link); 
 
     e.preventDefault(); 
 
    } 
 
    }); 
 
});
<script src="http://code.jquery.com/jquery-1.11.3.js"></script> 
 

 

 
<div class="text-center searchBar"> 
 
    <form action=""> 
 
     <input type="text" id="searchText" /> 
 
    </form> 
 
</div> 
 

 
<div class="container displayResults"> </div>

Последовательность событий при вводе символа является: KeyDown, нажатие клавиши, KeyUp.

Для первых двух событий у вас есть возможность предотвратить, в то время как вы не можете предотвратить символ, набранный при событии keyup.

Событие Keyup - это последнее событие, которое вы слушаете, и вы можете только сказать: ok, это символ, который я принимаю, но я не могу предотвратить эффект этого charcter, например, представление формы.

При вводе новой строки результаты трех событий:

KeyDown KEYCODE = 13, = 13 charCode = 0

нажатие KEYCODE = 13, который = 13 charCode = 13

KeyUp keyCode = 13 which = 13 charCode = 0

+0

Я рассматривал их как одно и то же: keyup, keypress, keydown. Я рад, что могу подавить умолчание с помощью нажатия клавиши, но я в замешательстве, почему то же самое нельзя сделать с помощью keyup. – CodingerSK

+0

Я понял ответ на свой вопрос выше: keyup уволен ПОСЛЕ подачи, и поэтому его нельзя отменить. – CodingerSK

+0

@CodingerSK Я обновил ответ: да на клавиатуре вы не можете остановить отправку формы. – gaetanoM