2016-01-20 80 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

您可能想嘗試禁用表單提交事件。 ('submit',function(e){e.preventDefault(); return false;});'''當用戶按下回車鍵時避免表單提交。在將數據附加到主體之前,還要檢查響應是否具有「查詢」鍵。 – 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。

對於前兩個事件,您可以預防,但無法防止在鍵入事件中鍵入的字符。

關鍵事件是您最後聽到的事件,您只能說:好吧,這是我採取行動的角色,但我無法防止此特徵的效果,如表單提交。

當鍵入新行的三個事件的結果是:

KEYDOWN鍵代碼= 13 = 13則charCode = 0

按鍵鍵代碼= 13 = 13則charCode = 13

KEYUP keyCode = 13 which = 13 charCode = 0

+0

我正在對待他們類似的:keyup,keypress,keydown。我很高興能夠使用按鍵壓制默認值,但我很困惑爲什麼使用keyup無法做到這一點。 – CodingerSK

+0

我想出了上面我自己的問題的答案:在提交後觸發了鍵控,因此無法取消。 – CodingerSK

+0

@CodingerSK我更新了答案:是的,你無法停止表單提交。 – gaetanoM