没有更新元素的类 - jQuery

时间:2016-06-20 22:06:34

标签: javascript jquery

模糊后,如果输入为空,我想添加类.hass-error,之后我将一些文本写入输入,在创意类.hass-error必须删除并添加类has-success。 .has-error正在删除但是新的clas

function checkSignupData() {
      var username = $('.signup-panel input[name="username"]');

        username.on({
          'focusin': function(){},
          'focusout': function(){
            if(!this.value.length) {
              $(this).closest('.form-group').removeClass('has-success').toggleClass('has-error');
            }
            else if(this.value.length > 3 && this.value.length < 32) {
              $(this).closest('.form-group').removeClass('has-error').toggleClass('has-success');
            }
          }
        });
    }
    setInterval(checkSignupData(), 100);

2 个答案:

答案 0 :(得分:0)

你不需要设置间隔,因为你正在使用事件,你最终会绑定大量的事件处理程序,这可能会导致你的问题

你也应该使用addClass,因为它更加自信

编辑:删除setInterval并一次调用checkSignupData

答案 1 :(得分:0)

function checkSignupData() {
   var username = $('.signup-panel input[name="username"]');

   if (username.text().length > 0) {  
       username.closest('.form-group').removeClass().addClass('has-success');
   } else {
       username.closest('.form-group').removeClass().addClass('has-error');
   }
}

window.setInterval(function(){
    checkSignupData();
}, 5000);

这不是使用setInterval的理想解决方案,因为DOM会变得混乱并使您的应用程序变慢。例如,如果此username位于表单中,则可以在提交表单时调用该检查。就像我说的那样,不是最理想的解决方案,而是我认为你想要实现的解决方案。

checkSignupData()将每5秒调用一次。

我刚想到的另一个解决方案可能有用:

username.on('keyup', function() {
    // call function
});

我原本以为这可能不起作用,因为如果input中没有任何内容,它就不会触发。但是,按退格键删除文本也会触发事件。唯一的想法是,在启动时,你必须将元素初始化为has-error类,因为它最初没有任何内容。