Javascript 全局变量在事件发生时不更改

Javascript 全局变量在事件发生时不更改,javascript,jquery,variables,global-variables,Javascript,Jquery,Variables,Global Variables,我有一个名为userValue的全局变量。当页面加载时,该值将查找所选选项并存储该选项值。加载时,它将存储默认值或null,因为该选项已禁用。但是,一旦每个站点动态填充了更多选项,我将尝试全局存储所选选项的值,以便继续重用varialbe userValue。当我包括以下内容时,以下内容正常工作: userValue = $('#my_SiteUsers').find(':selected').val(); 在RefreshGroupList函数中,但是如果我必须这样做,那不是违背了使

我有一个名为userValue的全局变量。当页面加载时,该值将查找所选选项并存储该选项值。加载时,它将存储默认值或null,因为该选项已禁用。但是,一旦每个站点动态填充了更多选项,我将尝试全局存储所选选项的值,以便继续重用varialbe userValue。当我包括以下内容时,以下内容正常工作:

   userValue = $('#my_SiteUsers').find(':selected').val(); 
在RefreshGroupList函数中,但是如果我必须这样做,那不是违背了使用全局变量的目的吗?现在,我所做的任何更改都返回默认值

HTML:

JS:


由于您希望$'my_SiteUsers'.find':selected'.val的值更改为按您所做的方式分配它,因此实际上对您没有帮助。字符串值是按值复制的,您需要引用

只需保留对DOM元素的引用即可:

 userValueHolder = $('#my_SiteUsers').find(':selected')
并在需要时使用useuserValueHolder.val请求值。我会


最好将事件处理程序保存在JS中,而不是HTML中,并声明全局变量,尽管您不应该真正需要全局变量,但您需要对userValue执行的任何操作都可以放在RefreshGroupList中。

javascript在哪里?主体或头部中的内部脚本标记或外部js文件?$未定义:您需要在小提琴中包含jQuery:@watson对不起,我只在JSFIDLE中发布了相关代码,而不是全部内容。我的站点有Jquery和其他所需的framworks。@UFL1138它在一个外部文件中。这有帮助吗?这将不起作用,因为如果所选用户发生更改,userValueHolder的值将不会更改。他想要的是使用一个简单的变量神奇地跟踪所选的选项——这在javascript中是不太可能的,尽管可以将处理程序附加到onchange事件以进行选择,并将当前所选的选项分配给全局变量——但他已经这样做了。他想要的是在不使用onchange的情况下神奇地跟踪当前选择的值。因此,我唯一的选择是将userValue=$'my_SiteUsers.find':selected.val;在我需要它的每个函数中?我会在doc ready函数的顶部声明它,但是一旦你的应用程序达到一定的复杂程度,可能超过400行,我会研究requireJS,这使你能够很好地定义你的JS。这个应用程序肯定会达到+400行。已经是350点了。我会看看requireJS,但现在我会试试你发布的内容。thanks@Batman:否,您只需要在选择更改时包含代码,在本例中为onchange事件。您的混淆源于这样一个事实,即您还希望在更改选择值时调用RefreshGroupList,因此您误解了将新值分配给userValue与调用RefreshGroupList之间的相关性。为避免混淆,我认为您应该在onchange事件处理程序中分配userValue,但不在RefreshGroupList之前。这将清楚地告诉您,设置userValue和调用RefreshGroupList是两件不同的事情,如果需要在onchange事件之外调用RefreshGroupList,则不需要分配userValue。
  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);
              }
          });
}
 userValueHolder = $('#my_SiteUsers').find(':selected')
// 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);
    }  
});