.on(“ change”,function(){}不要在内部调用function

时间:2018-09-27 09:44:27

标签: javascript jquery

<script>
    $("#text").on("change",function(){
        var id =  $(this).val();
        if(id!= ""){
            $('#test').rules('remove',  'required');
        }else{
            $('#test').rules('add',  'required');
        }
        debugger;
        SetIndicator(id);           
    });

    function SetIndicator(id){ do something..}
</script>

问题是,当我更改“ #text”时,它没有调用SetIndicator(id),但是当我刷新页面SetIndicator(id)时,它正常工作了

对于jsfiddle https://jsfiddle.net/76thdqcp/

2 个答案:

答案 0 :(得分:0)

问题在于更改后的事件仅在textinput的焦点变为“ off”后才被触发。将代码更改为keyup-event可以解决您的问题。

$("#text").on("keyup", function() {
  var id = $(this).val();
  if (id) {
    //$('#test').rules('remove', 'required');
  } else {
    //$('#test').rules('add', 'required');
  }
  SetIndicator(id);
});

function SetIndicator(id) {
  console.log('id', id);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="text" />

答案 1 :(得分:-1)

$("#text").change(function(){
    var id =  $(this).val();
    if(id!= ""){
        $('#text').attr('style',  'color:red');
    }else{
        $('#text').attr('style',  'color:yellow');
    }
    SetIndicator(id);           
});

function SetIndicator(id){
  console.log(id); 
  $("#test").html("Its working");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

<input type="text" id="text" />
<div id="test"></div>

尝试下面的代码。

 $("#text").change(function(){
    var id =  $(this).val();
    if(id!= ""){
        $('#text').attr('style',  'color:red');
    }else{
        $('#text').attr('style',  'color:yellow');
    }
    SetIndicator(id);           
});

function SetIndicator(id){
  alert("hi"); $("#test").html("Its working");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

<input type="text" id="text" />
<div id="test"></div>

希望对您有帮助。