skrzypce

Przykro mi zadać pytanie, nienawidzę pytania tutaj i nie chcę być postrzegany jako wampir, ale jestem taki utknięty z tym i nie sądzę, że jestem na właściwych liniach, jeśli To nie ma sensu w ogóle komentarz i spróbuję wyjaśnić. Jestem zdesperowany!

Zasadniczo, na czym pracuję, wymaga wybrania firmy, a kiedy to zrobisz, generuje kilka pola wyboru. Po wybraniu profilu z rozwijanej, musi zaznaczyć odpowiednie pola wyboru. Pole wyboru powinny zaznaczyć, czy to wszystko, co profil ma w swoim privilege_profiles.privilege kody (są to pola wyboru). obraz powyższego podsumowania

Mam tutaj mój kod na skrzypce tutaj http://jsfiddle.net/shaunyWeasel/DJ88R19E/5 /. Tablice znajdują się na szczycie skrzypce. Próbowałem to zrobić, aby to, że jeśli wartość tekstu etykiety była równoważna do sec_privileges.name, a następnie zaznacz te pola wyboru, jednak tak naprawdę nie działają, więc nie jestem pewien, czy jest lepszy sposób, aby przejrzeć . Poniższa metoda jest tym, nad czym pracowałem, aby spróbować go zaznaczyć, ale jestem pewien, że jest źle.

$(document).on('change', '#select_profile', function () {


var select = $("#select_profile option:selected").text(),
    selectedProfile, privileges, div, label, access;

var checked = document.getElementsByTagName('input');

for (var i = 0; i < checked.length; i++) {
    if (checked[i].type == 'checkbox') {
        checked[i].checked = false;
    }
}

if (select !== 'None') {

    for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
        if (PRIVILEGE_PROFILES[i].PROFILE_ID === select) {
            selectedProfile = PRIVILEGE_PROFILES[i];
            privileges = selectedProfile.PRIVILEGE_CODE;
        }
    }


    for (var i = 0; i < SEC_Privileges.length; i++) {
        if (privileges[i] === SEC_Privileges[i].Unique_Code) {

            console.log(privileges);
            var labels = document.getElementsByTagName('label');
            var checked = document.getElementsByTagName('input');

            for (var c = 0; c < checked.length; c++) {
                if (SEC_Privileges[i].Name == labels) {
                    checked[c].checked = true;
                }
            }

        }

    }
}

  });

Jeśli to nie ma sensu, oto krok po kroku, jak to działa i gdzie jestem i utknął:

  1. Użytkownik wybiera firmę z rozwijanej firmy_Selection

  2. Kiedy wybrana jest firma, generuje pola wyboru dla tej firmy w zależności od jego firmy_privileges.UNIQUE_CODE (tablica)

  3. Następnie użytkownik musi wybrać coś z profilu_Selection i w zależności od tego, jaki profil wybierają, sprawdzą odpowiednie pola wyboru, w zależności od privilege_profile.privilege_codes, które ma. (Więc jeśli wybrałeś załogę, wtedy zaznaczyłby pudełko Widok Tyrerell, ponieważ jest to jedyny profil?

3
Red 12 sierpień 2014, 17:28

2 odpowiedzi

Najlepsza odpowiedź

Czy jest powód, dla którego nie używasz selektorów jQuery w swoim kodzie?

W każdym razie zrobiłem aktualizację, aby rozwiązać problem (nie korzystając z jQuery) http://jsfiddle.net/DJ88R19E / 7 /

Głównym problemem jest to, że nie ustawiłeś żadnych identyfikatorów do swoich pola wyboru. Ustawiłem ID odpowiadające Unique_Code Twoich przywilejów.

access.id = SEC_Privileges[i].Unique_Code;

Następnie podczas iteracji powiązanych przywilejów z wybranego profilu, po prostu użyłem getElementById, ponieważ privileges zawiera unikalny_Code używany jako identyfikatory pola wyboru.

2
Tacos 12 sierpień 2014, 13:58

Oto przykład roboczy: Demo

Zmieniłem się następującymi rzeczami:

1) Kiedy tworzysz pole wyboru, dodałem nazwę klasy na te pola wyborowych podobnych do UNIQUE_CODE

$(document).on('change', '#select_company', function () {

        // declare variables before the function
        var select = $("#select_company option:selected").text(),
            selectedProfile, privileges, div, label, access;

        // remove access checkboxes from previously selected profile
        $('.apps input[type=checkbox]').remove();
        $('.apps label').remove();

        // if the selected option is 'None', do nothing, else...
        if (select !== 'None') {

            // match the selected profile in the dropdown with the JS PROFILES object
            for (var i = 0; i < COMPANY_PRIVILEGES.length; i++) {
                if (COMPANY_PRIVILEGES[i].COMPANY_CODE === select) {
                    selectedProfile = COMPANY_PRIVILEGES[i];
                    privileges = selectedProfile.UNIQUE_CODE;
                }
            }
            // match the associated privileges from the profile within the entire privilege list
            for (var j = 0; j < privileges.length; j++) {
                for (var i = 0; i < SEC_Privileges.length; i++) {
                    if (privileges[j] === SEC_Privileges[i].Unique_Code) {
                        // get the div with the id === SEC_Privileges[i].Group_code
                        div = document.getElementById(SEC_Privileges[i].Group_Code);
                        access = document.createElement('input');
                        access.type = 'checkbox';
                        access.className  = SEC_Privileges[i].Unique_Code;
                        label = document.createElement('label');
                        // create a textnode with the unique code from the privileges
                        label.appendChild(document.createTextNode(SEC_Privileges[i].Name));
                        div.appendChild(label);
                        div.appendChild(access);

                    }
                }
            }
        }
    });

2) Pisana prosta funkcja Aby sprawdzić pole wyboru na podstawie nazwy klasy:

$(document).on('change', '#select_profile', function () {
    var selectedValue = $("#select_profile option:selected").text(),
    selectedProfile, privileges, div, label, access;

    console.log(selectedValue);
    for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
        if (PRIVILEGE_PROFILES[i].PROFILE_ID === selectedValue) {
            privileges = PRIVILEGE_PROFILES[i].PRIVILEGE_CODE;
        }
    }
    for(var j = 0; j < privileges.length; j++) {
     $('.'+privileges[j]).attr("checked", "true");   
    }


});
2
Rupali 12 sierpień 2014, 14:01