2011-03-04 47 views
2

如何以編程方式將某些複選框設置爲選中狀態?如何以編程方式設置jQuery下拉列表的值?

該場景如下: 一旦我通過管理員屏幕創建了一個用戶,我有一個用於「用戶角色」和一個用戶區域的jqueryDropdown複選框,因爲用戶可以有很多角色和許多區域與他/她相關聯。沒有問題,我完成並保存到數據庫。 我也給用戶更新用戶角色和地區的能力,我想通過jQuery的下拉菜單,檢查單做,所以我的做法如下:

  1. 給他們提供用於在同一屏幕創建用戶
  2. 發出Ajax請求以獲取用戶特定的角色和區域。
  3. 現在我想要做的是基於Ajax響應設置來檢查與通過DOM腳本響應的值相匹配的複選框。有誰知道如何做到這一點?
+0

請參閱http://stackoverflow.com/questions/1375334/jquery-dropdown-checklist-plugin-question – Orbit 2011-03-04 01:33:27

回答

4

我已經找到了答案,以我自己的問題。首先,我想提一提的是,如果我的原始問題是誤導性的,我很想填寫這個jquery組件http://dropdown-check-list.googlecode.com/svn/trunk/doc/dropdownchecklist.html

的Javascript功能來填充我的jQuery下拉清單插件如下:

$(document).ready(function() { 

    //These will apply the jquery drop down checklist to both of selects 
    $(".s1").dropdownchecklist({ width: 205}); 
    $("button, input:button", null).button(); 
    loadUserRoles(); 
    loadUserRegions(); 
}); 


function loadUserRoles(){ 

    var userName = $("#userName").val(); 
    var hostname = getHostName(); 
var requestURL = hostname.concat("fos", "https://stackoverflow.com/users/userRoles?userName="+userName); 

    $.getJSON(requestURL, null, function(data){ 
     var userRoles = new Array(); 

     $.each(data.list, function(i,item){ 
      userRoles.push(item.id.toString()); 
     }); 

     $("#role").dropdownchecklist("destroy"); 
     $("#role").val(userRoles); 
     $("#role").dropdownchecklist(); 
     //$("#role").dropdownchecklist("refresh"); 
}); 
} 

function loadUserRegions(){ 

    var userName = $("#userName").val(); 
    var hostname = getHostName(); 
var requestURL = hostname.concat("fos", "https://stackoverflow.com/users/userRegions?userName="+userName); 

    $.getJSON(requestURL, null, function(data){ 
     var userRegions = new Array(); 

     $.each(data.list, function(i,item){ 
      userRegions.push(item.id.toString()); 
     }); 

     $("#region").dropdownchecklist("destroy"); 
     $("#region").val(userRegions); 
     $("#region").dropdownchecklist(); 
}); 
} 

function getHostName(){ 

var url = document.URL; 
var rv = url.indexOf("fos"); 
var hostname = url.substring(0, rv); 
return hostname; 
} 

我的Grails的行動,返回JSON如下:

def userRoles = { 

    /* This action gets the user roles and returns it as JSON*/ 
    def user = Users.findByUserName(params["userName"]) 
    def rolesInstanceList = Authorities.findAllByUser(user) 

    def outputList = new JSONObject() 
    def rolesList = new JSONArray() 
    def jsonRole = null 

    rolesInstanceList.each { 
     jsonRole = new JSONObject() 
     def role = it.role 
     jsonRole.put("id", role.id) 
     jsonRole.put("roleName", role.roleName) 
     rolesList.put(jsonRole) 
    } 
    outputList.put("list", rolesList) 
    render outputList as JSON  
} 
+0

感謝您回覆並用您的解決方案回答您的問題。它可以幫助未來可能會遇到類似問題的人。 – 2011-03-04 16:06:59

0

返回一些JSON與國家...

{ 
    "roles": { 
    "role1": true, 
    "role2": false 
    }, 
    ... 
} 

那麼一些jQuery的應該做的......

$.each(json.roles, function(role, state) { 

    $(':checkbox[name="' + role + '"]')[0].checked = state; 

}); 
+0

感謝您的評論,但我需要使它與這個jQuery組件在這裏工作http:// dropdown-check- list.googlecode.com/svn/trunk/doc/dropdownchecklist.html它不是一個常規的複選框組件。 – Viriato 2011-03-04 14:00:23

2

我已經創建了一個類結構,其中一般創建DDCL並且代碼:

$('#selectorid').dropdownchecklist('destroy'); 

破壞了最初創建的DDCL的完整性。

我發現,這種解決方案的工作原理大致爲我的應用更好:

$('#selectorid').val(values); 
$('#selectorid').dropdownchecklist('refresh'); 

其中 '值' 是值的陣列(例如,[1,2,3])。這不會破壞最初創建的DDCL的完整性。

相關問題