为什么在Jquery中没有从JSON中提取该值

时间:2011-02-15 14:53:48

标签: jquery jquery-selectors

我有2个名为stuno和stuname的txt字段。当我在txtfield1中输入student no时,它会拉出并在txtfield2中显示学生姓名。所以这是我正在做的文件onload把重点放在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 个答案:

答案 0 :(得分:1)

尝试使用keypress代替change。离开输入焦点或更改选择框时会触发更改。只要按下或释放按键,就会触发按键。

所以而不是:

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

使用

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

答案 1 :(得分:0)

不是你问题的答案。

你在$和jQuery之间进行了改变,这有点奇怪。此外,您使用$("#stuno").attr("value") instead of $("#stuno").val()?

的原因是什么?

答案 2 :(得分:0)

有些浏览器在焦点丢失之前不会触发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()。我已经在你的ready函数的外部使用了jQuery变量,并确保$变量实际上是你的ready函数中的jQuery。只有当按下的键是 Enter 键时,我才将change处理程序更改为在keypress上运行。