2012-04-23 109 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>标签。