0

我有两个选择元素。我试图通过使一些变量全局化来清理我的旧代码。

在我有这样的事情之前:

var user = $('#my_SiteUsers').val();

问题是现在我只能从这个变量中获取值,在其他时候我可能需要像 innerHTML 这样的东西,我宁愿不必为此创建一个新变量。

所以我创建了一个名为 user 的全局变量。

在 document.ready 开始。但现在我的变量用户和组没有给我我需要的值。例如,警报是触发器,因为没有选择默认选项。抱歉,如果问题不清楚。如果有帮助,我可以发布旧代码。

$(document).ready(function(){ 
    user = $('#my_SiteUsers');
    group = $('#my_SiteGroups');
    groupsAssigned = $("#my_SPGroupsAssigned");
    groupAvailable = $("#my_SPGroupsAvailable");
    userAssigned = $("#my_SPUsersAssigned").html("");
    userAvailable = $("#my_SPUsersAvailable").html("");

    $("button").click(function() { return false; });

    populate();
});


function populate() {
  //Populate the user list
  strHTMLSiteUsers = "";
  $().SPServices({
      operation: "GetUserCollectionFromSite",
      async: true,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find("User").each(function() {
          strHTMLSiteUsers += "<option value='" + $(this).attr("LoginName") + "'>" + $(this).attr("Name") + "</option>";
        });
        user.append(strHTMLSiteUsers);
      }
  });

  if (user.val() == "default"){
    //don't do anything
  }else{
    //if a user is selected, run 
    RefreshGroupLists();
  }

  //Populate the group list  
  strHTMLSiteGroups = "";
  $().SPServices({
      operation: "GetGroupCollectionFromSite",
      async: true,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find("Group").each(function() {
        strHTMLSiteGroups += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";          
        });
        group.append(strHTMLSiteGroups);
      }
  });
  if (group.val()=="default"){
    //don't do anything
  }else{
    //if a user is selected, run 
  RefreshUserLists();
  } 
}

JSFiddle:http: //jsfiddle.net/JevpS/

4

3 回答 3

2

由于调用的异步性质,调用user.val()( 和)的代码group.val()在各个处理程序之前执行。您只能期望元素在代码内部(或之后 - 按执行时间顺序)填充选项。completefunc$().SPServicesselectcompletefunc

于 2013-10-01T03:58:22.657 回答
0

尝试使用

var gl_var="";

或者

gl_var = undefined

请参阅http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

另请查看 Javascript 中变量声明语法(包括全局变量)之间的差异?

于 2013-10-01T03:16:02.407 回答
0

ready()在;上方声明您的变量 ready()并在;中定义它们

于 2013-10-01T04:52:33.770 回答