Как я могу программно установить значения выпадающего списка проверки jQuery? - PullRequest
2 голосов
/ 04 марта 2011

Как программно установить некоторые флажки для выбранных?

Сценарий выглядит следующим образом: Как только я создаю пользователя через экран администратора, у меня появляется пара флажков jqueryDropdown, один для «Роли пользователя» и один для «Регионов пользователя», поскольку у пользователя может быть много ролей и много регионов, связанных с ним / ней. Нет проблем, я получил это выполнено и сохранено в базе данных. Я также даю пользователю возможность обновлять роли и регионы пользователей, и я хочу сделать это с помощью выпадающего списка проверки jQuery, поэтому мой подход заключается в следующем:

  1. Дайте им тот же экран, который они использовали для создания пользователя
  2. Выполните запрос Ajax для получения пользовательских ролей и регионов.
  3. Теперь то, что я хочу сделать, основано на ответе Ajax, установленном для проверки флажков, которые соответствуют значению ответа через DOM Scripting. Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Я нашел ответ на свою проблему.Сначала я хочу упомянуть, что я хотел заполнить этот компонент 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", "/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", "/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      
}
2 голосов
/ 26 июня 2013

Я создал структуру класса, где в общем случае создается DDCL и код:

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

разрушает целостность DDCL, который был изначально создан.

Я обнаружил, что это решение работает намного лучше для моего приложения:

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

где 'values' - это массив значений (например, [1, 2, 3]). Это не нарушает целостность изначально созданного DDCL.

0 голосов
/ 04 марта 2011

Вернуть немного JSON с состоянием ...

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

Тогда некоторые jQuery должны это сделать ...

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

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

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...