1

userValue というグローバル変数があります。ページが読み込まれると、この値は選択されたオプションを見つけて、そのオプション値を保存します。オプションが無効になっているため、ロード時にデフォルトまたはnullが保存されます。ただし、onchange (より多くのオプションがサイトごとに動的に入力されます) では、選択したオプションの値をグローバルに保存しようとしているので、単純に変数 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

4

2 に答える 2

0

$('#my_SiteUsers').find(':selected').val()あなたがしたようにそれを割り当てる変更の値が実際には役に立たないことを意図しているので。文字列値は値によってコピーさます。参照が必要です。

DOM 要素への参照を保持するだけで、次のことができます。

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

必要なときに値をリクエストしますuseuserValueHolder.val()

于 2013-10-01T15:30:01.300 に答える
0

私はこのようなことをします。

// 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);
    }  
});

HTML ではなく JS にイベント ハンドラーを保持し、グローバルを宣言することをお勧めしますが、これにはグローバル var は必要ありません。

于 2013-10-01T15:37:44.250 に答える