jQuery .change () с ajax требует обновления для выпадающих списков - PullRequest
0 голосов
/ 21 июля 2011

Так что код, который я имею, кажется правильным; однако комбинированные списки изменяются только после обновления страницы; это не то, что я ожидал с $ .change ().

До текущего кода у меня было два отдельных вызова ajax. Один снимал бы все флажки, а другой устанавливал бы их. Это работало без обновления страницы; однако иногда проверяются неправильные поля (или даже не проверяются правильные).

Я проверил все возвращения с php через firebug, и результаты ожидаемые.

Код с jQuery v1.5.1, потому что я использую пользовательский интерфейс jQuery.

Заранее спасибо!

PHP

<?php

require 'config.php';

if(!empty($_GET['usr'])) {

    //Retrieve committee banks list
    $db->query('SELECT * FROM clas_gov_app_meeting_access_list WHERE usr="committeebank"');
    $committeebank = $db->get();

    //Retrieve selected users permissions
    $db->query('SELECT * FROM clas_gov_app_meeting_access_list WHERE usr="'. $_GET['usr'].'"');
    $accesslist = $db->get();

    //Echo user permissions
    echo $accesslist[0]['isadmin'];

    //Combine committebank's and users permissions sepereated with a slash
    $accesslist[0]['accessto'] = $committeebank[0]['accessto'] .',/,' . $accesslist[0]['accessto'];
    //Explode on commas
    $accesslist = explode(',',$accesslist[0]['accessto']);

    //Echo each value
    foreach($accesslist as $key => $value) {
        echo $value.' ';
    }
}

?>

JavaScript / jQuery

    <script type="text/javascript">
    function SetCheckboxes() {  

        var usr = $('#KUOID2').find('option:selected').val();
        $.ajax({
            url : 'ajaxLoadAccess.php?usr=' + usr,
            dataType : "text",
            success : function(response) {      


                //first char echoed is a single identifier for admin status
                var isAdmin = response.charAt(1);
                //clear that from the string
                response = response.replace(response.charAt(1), '');


                //committebank is first, and seperated from usr by a slash
                split_response = response.split("/");
                //want to clear checkboxes from the committebank and set from the usr
                ClearCheckboxes = split_response[0].split(" ");
                SetCheckboxes = split_response[1].split(" ");

                //CLEAR CHECKBOXES

                //For each value in the array
                for(var i in ClearCheckboxes) {
                    //Skipping over empty checkboxes
                    if(ClearCheckboxes[i] != '') {                              
                        //Check the boxes that need to
                        if($('input[name='+ClearCheckboxes[i]+'2]').attr('checked')) {
                            $('input[name='+ClearCheckboxes[i]+'2]').attr('checked', false);
                        }
                    }
                }

                ClearCheckboxes = [];

                //SET CHECKBOXES

                //For each value in the array
                for(var i in SetCheckboxes) {
                    //Skipping over empty checkboxes
                    if(SetCheckboxes[i] != '') {                                
                        //Check the boxes that need to
                        $('input[name='+SetCheckboxes[i]+'2]').attr('checked', true);
                    }
                }

                SetCheckboxes = [];

                if(isAdmin>0) {
                    $('input[name=isAdmin2]').attr('checked', true);
                } else {
                    $('input[name=isAdmin2]').attr('checked', false);   
                }

            }
        });
    }

$(document).ready(function() {
    $(function() {
        $( "#tabs" ).tabs();
    });

     SetCheckboxes();

     $("select").change(function() {
        SetCheckboxes();
    });
});
</script>

1 Ответ

0 голосов
/ 21 июля 2011

выделенные строки являются виновниками в вашем коде. Вы используете SetCheckboxes как переменную в той же функции и не используете var для ее объявления. Пожалуйста, используйте приведенный ниже код, надеюсь, он вам подойдет.

<script type="text/javascript">
    function SetCheckboxes() {  

        var usr = $('#KUOID2').find('option:selected').val();
        $.ajax({
            url : 'ajaxLoadAccess.php?usr=' + usr,
            dataType : "text",
            success : function(response) {      


                //first char echoed is a single identifier for admin status
                var isAdmin = response.charAt(1);
                //clear that from the string
                response = response.replace(response.charAt(1), '');


                //committebank is first, and seperated from usr by a slash
                split_response = response.split("/");
                //want to clear checkboxes from the committebank and set from the usr
                **var ClearCheckboxes = split_response[0].split(" ");
                var SetCheckboxes = split_response[1].split(" ");//You should always use var to declare the js variables otherwise they are in global scope.**

                //CLEAR CHECKBOXES

                //For each value in the array
                for(var i in ClearCheckboxes) {
                    //Skipping over empty checkboxes
                    if(ClearCheckboxes[i] != '') {                              
                        //Check the boxes that need to
                        if($('input[name='+ClearCheckboxes[i]+'2]').attr('checked')) {
                            $('input[name='+ClearCheckboxes[i]+'2]').attr('checked', false);
                        }
                    }
                }

                ClearCheckboxes = [];

                //SET CHECKBOXES

                //For each value in the array
                for(var i in SetCheckboxes) {
                    //Skipping over empty checkboxes
                    if(SetCheckboxes[i] != '') {                                
                        //Check the boxes that need to
                        $('input[name='+SetCheckboxes[i]+'2]').attr('checked', true);
                    }
                }

                SetCheckboxes = [];

                if(isAdmin>0) {
                    $('input[name=isAdmin2]').attr('checked', true);
                } else {
                    $('input[name=isAdmin2]').attr('checked', false);   
                }

            }
        });
    }

$(document).ready(function() {
    $(function() {
        $( "#tabs" ).tabs();
    });

     SetCheckboxes();

     $("select").change(function() {
        SetCheckboxes();
    });
});
</script>
...