2014-07-25 50 views
0

我無法從我正在通過ajax加載的選擇列表中獲取.val。它似乎只給我第一個選項的價值,不管我是否改變選擇本身。奇怪的是我在控制檯中檢查了$("select").val();$("select").find(":selected");,並且查找選擇返回一個數組,其中第一個項目和我當前選擇的項目。所以它似乎是選擇了新的並保留第一個項目,但val只是返回第一個項目。獲取通過ajax加載的選擇列表的.val

我三重檢查了我的文件,以確保沒有另一個別的地方,而且沒有。

這裏是我的代碼:

拳頭追加我的選擇框(與其他事物)的點擊動作

var statusCheck = "<div class='confirmContainer' style='display:none;'><p class='confirmText'>Change Status of item(s).</p><select class='statusChangeUsr' name='statusHere'></select><button class='smallResultsButton submitStats'>Submit</button><button class='smallResultsButton cancelStats'>Cancel</button></div>"; 
      $(".actionsToolbar3").append(statusCheck); 

然後在接下來的點擊帶來的選項列表中的

$.ajax(
      { 
       cache: false, 
       url : "/listUserStatuses", 
       type : "GET", 
        success:function(data, textStatus, jqXHR) { 

        $.each(data.statuses, function() { 
         $(".statusChangeUsr").append("<option value=" + this.id + " >" + this.name + "</option>"); 
        });       
       }, 
       error: function(jqXHR, textStatus, errorThrown) 
       { 
        alert("Error"); 
       } 
      }); 

然後在第三次點擊我去從選定的選項得到的值與

$(".statusChangeUsr").val(); 

問題是,它每次都返回3(這是第一個選項的值)。正如前面提到的,我發現,如果我把$(".statusChangeUsr").find(":selected");在開發者控制檯(鉻)我得到以下 -

[<option value=​"3">​Active​</option>​, <option value=​"5">​On-Hold​</option>​] 

3是第一項和5爲實際的選擇項的值的值。最終目標是返回當前選定項目的價值(在上述案例中爲5)任何幫助將不勝感激。

+0

凡在你的代碼,你實際上是調用$( 「statusChangeUsr。」)VAL()?在$(document).ready函數中?在您通過ajax加載後調用的獨立函數中?如果在初始化過程中select語句中只有1個選項,或者在實際更新類之前調用​​該類,jQuery將無法識別ajax加載的選項。 – Michael

+0

看起來就像jQuery一樣,兩個選項都被選中,否則它只會在查找調用中返回一個元素。 –

回答

0

取決於您調用$(「。statusChangeUsr」)。val()的位置,jQuery可能會查看初始頁面加載時最初生成的最初加載的內容。然後,一旦你用AJAX改變了任何值,jQuery仍在查看最初加載到DOM中的原始$(「。statusChangeUsr」),而不是當前顯示的附加$(「。statusChangeUsr」)。

每當我通過AJAX調用加載東西時,我要麼使用匿名函數,要麼將其直接放在$(document).ready函數中。嘗試:

$(document).ready(function(){ 
    $(document).on('change','.statusChangeUsr',function(){ 
     console.log($('option:selected',this)); 
    }); 
}); 
相關問題