Как загрузить значения без setTimeout? - PullRequest
0 голосов
/ 19 июля 2010

Посмотрите следующий пример:

<select id="connection" onchange="load_databases_of_this_connection();"></select>
<select id="database" onchange="load_tables_of_this_database();"></select>
<select id="table" onchange="load_columns_of_this_table();"></select>
<input id="fieldcode" type="text"/>
<input id="fieldcolor" type="text"/>
<script type="text/javascript" language="javascript">

$('#connection').change();

setTimeout("x()",2000 ); // select database and load tables

function x() {
        $('#database').val( 'main_database' );
 $('#database').change();
 setTimeout("t()",2000 );   //  select table and load columns
}


function t() {
 $('#table').val( 'payments' );    
 $('#table').change();
 setTimeout("a()",2000 ); // select columns
}

function a() {
 $('#fieldcode').val( 'code' );
 $('#fieldcolor').val( 'status' );
}

</script>

Этот код работает, но мне он не нравится.Что я хочу сделать, это загрузить значения впоследствии, когда «событие изменения» заканчивается (успешно или завершено), а затем вызвать следующий, например, если я делаю следующий пример без setTimeout, это не работает:

<code>
    <script type="text/javascript" language="javascript">
    $('#connection').change();
    $('#database').val( 'main_database' );
    $('#database').change();
    $('#table').val( 'payments' );<br>
    $('#table').change();<br>
    $('#fieldcode').val( 'code' );
    $('#fieldcolor').val( 'status' );
    </script>
Iя пытаюсь сделать это с ajaxComplete, но я получаю бесконечный цикл, при каждом завершении ajax-вызова ajaxComplete называется ...:
$('#database').ajaxComplete( function (e) { 
    $('#table').val( 'payments' );    
    $('#table').change();   
} );

ПОЖАЛУЙСТА, ПОМОГИТЕ!

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Я решил легко ...

$.ajax( {complete:function() {

    $('#database').val('main_database');

    $.ajax( {complete:function() {

        $('#table').val('payments');   

            $.ajax( {complete:function() { 

                $('#fieldcode').val( 'code' );
                $('#fieldcolor').val( 'status' );
            }});
    }});
}});
0 голосов
/ 19 июля 2010

Я предполагаю, что в вашем коде есть нечто большее, чем кажется на первый взгляд, если так, то это должно сработать:

$('#connection').change(function(){
    $('#database').val('main_database');
}); 
$('#database').change(function(){
    $('#table').val('payments');    
}); 
$('#table').change(function(){
    $('#fieldcode').val( 'code' );
    $('#fieldcolor').val( 'status' );
});
...