Javascript 使用if语句调用函数

Javascript 使用if语句调用函数,javascript,jquery,Javascript,Jquery,我制作了一个函数,用于检查HTML中包含类“txt”的anny textfield元素是否在上次加载页面时更改了值。如果anny文本已更改,则函数应在If语句中返回true,否则返回false。然而,我只是得到虚假。我做错了什么 HTML: 你的代码有很多问题。例如,当您读取$(this)的text()时,您的函数不知道this是什么。在没有真正解决您的问题的情况下,这可能会将您引向正确的方向: CheckTextChange函数有几个问题: 它将只检查第一个值 它没有正确地获取文本 您可以将

我制作了一个函数,用于检查HTML中包含类“txt”的anny textfield元素是否在上次加载页面时更改了值。如果anny文本已更改,则函数应在If语句中返回true,否则返回false。然而,我只是得到虚假。我做错了什么

HTML:


你的代码有很多问题。例如,当您读取
$(this)
text()
时,您的函数不知道this是什么。在没有真正解决您的问题的情况下,这可能会将您引向正确的方向:


CheckTextChange函数有几个问题:

  • 它将只检查第一个值
  • 它没有正确地获取文本
  • 您可以将其更改为以下内容:

    function CheckTextChange() {
    
        //Checks if values have changed in elements containing class="txt" 
        var isChanged = false;
        $('.txt').each(function () {
            var previousVal = $(this).get(0).defaultValue,
                currentVal = $(this).val();
            //alert( $(this).text()); //or $(this).text();
    
            if (currentVal != previousVal) {
                isChanged = true;
            }
        });
    
        return isChanged;
    }
    

    您可以使用事件跟踪正在更改的文本框之一。您有几个具有相同的类属性。在回答中调用了(function(){..})(。如果希望变量不暴露在全局范围内,这一点非常重要。示例:var IsChanged将获得全局值,其他页面可能会更改其值

     (function(){
    
           var IsChanged = false;
           $('#btnClick').on("click",function() {
            if(IsChanged)
            console.log('Changed');
            else
            console.log('Not changed';)
        });
    
          $('.txt').change(function(){
            IsChanged = true;
          });
    
        })();
    

    如果您想知道是否有任何值已更改:

    function CheckTextChange () {
       var rtrn = false;
       $('.txt').each(function() {     
           var previousVal = $(this)[0].defaultValue, currentVal = $(this).val();
           if (currentVal != previousVal) {          
               rtrn = true || rtrn;
           } 
       }) ;
    return rtrn;    
    }
    

    您的函数不返回任何内容(未定义)-这是错误的-您需要完全重写CheckTextChange您在每个回调中执行的
    返回
    ,而不是CheckTextChange函数我认为您可能需要在每个回调中定义您的上一个和当前。这不是你想要的吗?查看其中是否有更改?另请注意:在文档中:您可以通过返回false从回调函数中停止循环。这是正确的。在您的案例中,
    这个
    的范围是指窗口范围与jQuery对象。请注意,在
    .each()
    的内部,您可以使用它,它引用一个jQuery对象。作为一个有趣的测试范围检查这把小提琴虽然这个答案可能是正确的,请添加一些解释。传授底层逻辑比仅仅给出代码更重要,因为它可以帮助OP和其他读者自己解决这个问题和类似的问题。希望对其他人有帮助
    function CheckTextChange() {
    
        //Checks if values have changed in elements containing class="txt" 
        var isChanged = false;
        $('.txt').each(function () {
            var previousVal = $(this).get(0).defaultValue,
                currentVal = $(this).val();
            //alert( $(this).text()); //or $(this).text();
    
            if (currentVal != previousVal) {
                isChanged = true;
            }
        });
    
        return isChanged;
    }
    
     (function(){
    
           var IsChanged = false;
           $('#btnClick').on("click",function() {
            if(IsChanged)
            console.log('Changed');
            else
            console.log('Not changed';)
        });
    
          $('.txt').change(function(){
            IsChanged = true;
          });
    
        })();
    
    function CheckTextChange () {
       var rtrn = false;
       $('.txt').each(function() {     
           var previousVal = $(this)[0].defaultValue, currentVal = $(this).val();
           if (currentVal != previousVal) {          
               rtrn = true || rtrn;
           } 
       }) ;
    return rtrn;    
    }