почему значение не извлекается из JSON в Jquery - PullRequest
0 голосов
/ 15 февраля 2011

у меня есть 2 текстовых поля с именами stuno и stuname. когда я ввожу ученика нет в txtfield1, он тянет и показывает имя ученика в txtfield2. так вот что я делаю при загрузке документа и делаю акцент на txtfield1 (stuno). Если я не ставлю акцент, он очень хорошо вытягивает Имя. Если у меня есть фокус, он не тянет. Загрузка формы мне нужно сосредоточиться на txtfield1 (stuno). Вот код, который у меня есть, пожалуйста, исправьте меня, если я делаю что-то не так.

$(document).ready(function(){
    $("#stuno").focus();
    $("#stuno").change(function(){
            if ( jQuery.trim( $( '#stuno' ).val() ) == '' ) {               
                $('#stuname').val( '' );
                $( '#stuerr' ).text( 'Student Account Not Valid!' ) ;
            }
            else{
                  $.ajaxSetup ({cache: false}); 
                  $.getJSON("student.php",{'stuno' : $("#stuno").attr('value')},
                    function(data){                                         
                      if(data[0].status){                           
                            var labelvalue = data[0].label.split('-');
                            $("#stuname").attr("value",labelvalue[1]);  
                      }else{                          
                          $('#stuname').val( '' );
                          $( '#stuerr' ).text(data[0].label);
                      }
                      if(  $("#stuname").attr("value") ){                               
                          $( '#stuerr' ).text( '' ) ;
                     }
                   });

            }
        });
    });
}

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Попробуйте использовать keypress вместо change. Изменение срабатывает, когда вы покидаете фокус ввода или когда изменяется поле выбора. Нажатие клавиши срабатывает при каждом нажатии или отпускании клавиши.

Так что вместо:

$("#stuno").change(function(){

использовать

$("#stuno").keypress(function(){
0 голосов
/ 15 февраля 2011

Некоторые браузеры не запускают событие onChange, пока фокус не потеряется.Возможно, вы захотите сделать что-то вроде этого:

jQuery(document).ready(function($){
    $("#stuno").focus().keypress(function(e){
        if(e.which === 13){ // if the enter key was pressed
            e.preventDefault() // prevent the enter key from submitting the form
            if ( $.trim( $( '#stuno' ).val() ) == '' ) {
                $('#stuname').val( '' );
                $( '#stuerr' ).text( 'Student Account Not Valid!' ) ;
            }
            else{
                $.ajaxSetup ({cache: false}); 
                $.getJSON("student.php",{'stuno' : $("#stuno").val()},
                    function(data){                                  
                        if(data[0].status){                           
                            var labelvalue = data[0].label.split('-');
                            $("#stuname").val(labelvalue[1]);  
                        }else{                          
                            $('#stuname').val( '' );
                            $( '#stuerr' ).text(data[0].label);
                        }
                        if(  $("#stuname").val() ){                               
                          $( '#stuerr' ).text( '' ) ;
                     }
                   });

            }
        }
    });
});

Я сделал несколько вещей с вашим кодом.Я изменил все .attr('value',...) звонки на .val() для согласованности.И я использовал переменную jQuery снаружи вашей функции ready и убедился, что переменная $ фактически является jQuery внутри вашей функции ready.И я изменил ваш обработчик change, чтобы он работал на keypress, только если нажата была клавиша Enter .

0 голосов
/ 15 февраля 2011

Не совсем ответ на ваш вопрос.

Вы переключаетесь между $ и jQuery, что немного странно. Кроме того, есть ли причина, по которой вы используете $("#stuno").attr("value") instead of $("#stuno").val()?

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