簡體   English   中英

選擇輸入時單擊Ajax:從Ajax響應中填充選項

[英]Ajax on select input click: Fill options from Ajax response

我希望通過AJAX的響應來更新選擇輸入中的選項。 響應可能有所不同,舊選項應由新選項更新。

<select class="form-control" id="juniorProjects">
    <option></option>
</select>

但是,我希望只在單擊選擇框而不是任何選項時才調用方法getProjects()

var juniorProjects = document.getElementById('juniorProjects');
juniorProjects.addEventListener('click', function(){                
    getProjects("junior");
});

現在使用此代碼,每當我單擊任何選項時,它都會觸發select click事件,並且AJAX響應會更新這些選項,並且默認情況下始終選擇第一個。

function getProjects(type){
    $.ajax({
      url: "SOME_ENDPOINT_TO_GET_PROJECTS",
    }).then(function(data) {                           
        $("#juniorProjects").empty();
        var projectsList = data['result']['recentProjects'];
        for(i=0; i<projectsList.length; i++){
            $("#juniorProjects").append("<option value='" + projectsList[i]['projectId']+ "'>" + projectsList[i]['name'] + "</option>");
        }
    });
}

奇怪的觀察 :在Macbook Chrome瀏覽器上-選擇輸入時,即使選擇任何選項也不會觸發點擊。 在Chromebook chrome瀏覽器上-選擇輸入時,即使選擇任何選項也會觸發點擊

使用焦點事件並在通話后將其刪除

var fetchProjs = function () {
  juniorProjects.removeEventListener('focus', fetchProjs);
  getProjects("junior");
}

juniorProjects.addEventListener('focus', fetchProjs);

添加了事件監聽器后,可以使用removeEventListener刪除它。

 var juniorProjects = document.getElementById('juniorProjects'); juniorProjects.addEventListener('click', juniorProjectsClicked); function juniorProjectsClicked(){ getProjects("junior"); console.log('in event. This should only print once'); juniorProjects.removeEventListener('click', juniorProjectsClicked); } function getProjects(type){ // using setTimeout to imitate an ajax request setTimeout(function() { $("#juniorProjects").append("<option>TEST</option>"); }, 200); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select class="form-control" id="juniorProjects"> <option></option> </select> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM