2012-04-23 74 views
1

我正在填充我的選擇列表/放置點播,並且出於某種原因列表在MouseUp上消失。按需填充後,點擊下拉列表後消失

代碼填充列表:

<select id="UserList" name="UserList" onclick="getCountries()">.....</select> 
. 
. 
. 
     function getCountries() { 
     $.post("/Users/GetUsersJson/", { id: userId }, 
     function (result) { 

      $.each(result, function (item) { 
       $("#UserList").append(
       $("<option></option>").text(result[item].UserName).val(result[item].Id) 
       ); 
      }); 

     }, "json"); 
    } 

當我一下就行了但是當我鬆開鼠標按鈕,它關閉而不讓我在列表中選擇任何它被填充就好了。 我無法弄清楚發生了什麼事。

任何線索?

+0

你爲什麼要在點擊事件中做這件事?在負載上執行它會不會更好,因此只能自動完成一次?或者,如果它依賴於來自表單不同部分的變量,則可能會更好地在其他變量發生更改時調用此變量。 – Jonathan 2012-04-23 20:39:07

+0

這就是我開始使用它的方式,但被告知使用click事件重新執行它,因爲加載到該下拉菜單中的數據量「可能會減慢頁面速度」。 – Shenaniganz 2012-04-23 20:41:50

+0

如果可以,請嘗試使用mousedown並查看它是否正常工作。此外,您需要一種防止再次加載所有內容的方式,或者在重新填充之前清除下拉菜單。 – Jonathan 2012-04-23 21:07:29

回答

1

我看不到任何會導致您的下拉列表消失的東西,所以我建議放入一些警報框,以便您可以準確確定哪條線觸發問題。也就是說,你應該知道,這是可能的jQuery每種方法。

function getCountries() { 
    $.post("/Users/GetUsersJson/", { id: userId }, 
    function (result) { 

     $.each(result, function (index, item) { 
      $("#UserList").append(
      $("<option></option>").text(item.UserName).val(item.Id) 
      ); 
     }); 

    }, "json"); 
} 

使您的代碼更容易閱讀。

+0

我設置列表加載現在的那個div Ajax加載。我會留下一段時間的問題,希望有人知道它會是什麼。 – Shenaniganz 2012-04-23 21:04:48

+0

好吧,我很樂意繼續幫助你,但我想說的是,這段代碼應該正常工作,這意味着別的什麼是錯的。儘管沒有更多的信息,我仍然無法說出。 – 2012-04-23 21:27:18

+0

我什至不能想到還有什麼可能會影響它.... 該列表出現在Ajax.ActionLink()成功時引發的模式JQuery .dialog()中:event。 嗯.... – Shenaniganz 2012-04-23 21:45:55

0

HTML:

<select id="UserList" name="UserList"></select> 

的jQuery:

$(document).ready(function(e){ 

    $('#UserList').click(function(e){ 
     if($(this).children().length == 0){ 
      $.post("/Users/GetUsersJson/", { id: userId }, 
      function (result) { 

       $.each(result, function (item) { 
        $("#UserList").append("<option val='"+result[item].Id+"'>"+result[item].UserName+"</option>"); 
       }); 

      }, "json"); 
     } 
    }); 
}); 

試試上面:在彈出的消失是因爲當您單擊下拉,它會爲另一個GET請求

原因JSON數據並重新填充您的SELECT。我添加了一個長度爲children()的支票,以確保裏面沒有<option>標籤。