全局变量不会改变事件

时间:2013-10-01 15:25:04

标签: javascript jquery variables global-variables

我有一个名为userValue的全局变量。页面加载时,此值将查找所选选项并存储该选项值。在加载时,它将存储default或null,因为该选项被禁用。但是,onchange(每个站点动态填充更多选项),我试图全局存储所选选项的值,这样我就可以继续重用varialbe userValue。当我包括以下内容时,我的工作正常:

   userValue = $('#my_SiteUsers').find(':selected').val(); 
在RefreshGroupList()函数中

,但是如果我必须这样做,那是不是打败了拥有全局变量的目的?现在,我所做的任何更改都会返回“默认”

HTML:

 <select id="my_SiteUsers" style="width:200px;" onchange="RefreshGroupLists()">
        <option value='default' disabled="disabled">Select a user</option>
      </select>

JS:

  var user, userValue, userText, group, strHTMLSiteUsers, strHTMLSiteGroups, strHTMLAvailable, strHTMLAssigned, arrOptionsAssigned, arrGroups, arrUsers, intOpts, booMatch, booErr;

        $(document).ready(function(){ 
            user = $('#m

y_SiteUsers');
        userValue = $('#my_SiteUsers').find(':selected').val();
        userText = $('#my_SiteUsers').find(':selected').text();
        group = $('#my_SiteGroups');
        groupsAssigned = $("#my_SPGroupsAssigned").html("");
        groupAvailable = $("#my_SPGroupsAvailable").html("");
        userAssigned = $("#my_SPUsersAssigned").html("");
        userAvailable = $("#my_SPUsersAvailable").html("");

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

        populateUsers();
            populateGroups();
        });


function RefreshGroupLists(){
            //Populate the Groups Assigned
          $().SPServices({
              operation: "GetGroupCollectionFromUser",
              userLoginName: userValue,
              async: true,
              completefunc: function(xData, Status) {
                $(xData.responseXML).find("errorstring").each(function() {
                  alert("User not found");
                  booErr = "true";
                  return;
                });
                $(xData.responseXML).find("Group").each(function() {
                  strHTMLAvailable += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";
                  arrOptionsAssigned[intOpts] = $(this).attr("Name");
                  intOpts = intOpts + 1;
                });
                groupsAssigned.append(strHTMLAvailable);
              }
          });
}

JSFiddle

2 个答案:

答案 0 :(得分:0)

由于您希望$('#my_SiteUsers').find(':selected').val()的值更改分配它,因为您没有真正帮助您。字符串值被复制按值,您需要参考。

您可以做的只是保留对DOM元素的引用:

 userValueHolder = $('#my_SiteUsers').find(':selected')

并使用useuserValueHolder.val()

在您需要时请求该值

答案 1 :(得分:0)

我会do something like this.

// window.userValue = ''; // not necessary

$(document).ready(function(){
    var userValue;

    $('#my_SiteUsers').on('change', function(){
        RefreshGroupLists();
    });

    function RefreshGroupLists(){
        userValue = $('#my_SiteUsers').find(':selected').val();
        alert(userValue);
    }  
});

最好将事件处理程序保存在JS中,而不是保存在HTML中,并声明全局变量,尽管您不需要为此设置全局变量,无论您需要对userValue执行什么操作都可以放在RefreshGroupLists中。 / p>