2011-03-04 108 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的完整性。

相关问题