2014-09-01 72 views
0

延迟后,我用它来触发一次打字暂停在一个textarea启动功能:jQuery 2.1 |触发功能在textarea的

var keyTimer; 

$("#TEXTAREA").on('keyup mouseup', function(){ 

if (keyTimer) { 
clearTimeout(keyTimer); 
} 
keyTimer = setTimeout(function() { 
doFunction(); // Not working, triggers only once (on focus). 
}, 500); 

}); 

doFunction()只在第一KEYUP暂停(焦点)触发。该功能必须在每次暂停(500)时触发。现在我需要模糊TEXTAREA,然后重新集中它来重新激活对我无用的doFunction()。任何解决方案非常感谢

UPDATE

更新代码:

var keyTimer; 

$("#TEXAREA").on('keyup mouseup', function(){ 

if (keyTimer) { 
clearTimeout(keyTimer); 
} 
keyTimer = setTimeout(function() { 
doFunction(); // Formulates a string 
$("#TEXAREA").trigger('change'); 
}, 500); 

}).on('change', function(){ 

alert('test'); // This triggers at every keyup/mouseup delay (500) 

// This section of code must work after delay (500), but it doesn't, 
// it only works on Textarea blur, which is not what I want: 

var txtarea = $(this); 
var livecount = $("#myValue").val(); // Comes from doFunction() 
if (livecount.length > 2800) { 
txtarea.css('color','#C00'); // Change text color of textarea 
} else if (livecount.length <= 2800) { 
txtarea.css('color','#000'); // Change text color of textarea 
} 

}); 
+0

你需要之间的逗号你的事件监听器中的事件。 'Keyup,mouseup'。执行之前,你的函数是否等待了半秒? – tylerlindell 2014-09-01 13:50:09

+0

@tlindell使用此绑定方法不需要逗号之间的逗号。该代码在500ms时触发一个doFunction()。概率似乎是每500毫秒不发起textarea更改。我在textarea上触发了一个变化,但仍然没有任何变化。一个警报触发功能,但到目前为止textarea的变化是不会启动;-( – koolness 2014-09-01 15:20:05

+0

@tlindell - 请参阅更新。Thx输入。 – koolness 2014-09-01 15:48:32

回答

0

更新 - FINAL

好,我知道它的工作最后:

var keyTimer; 

$("#TEXTAREA").on('keyup mouseup', function(){ 

$(this).change(); // Need this to update keyboard character input 

}).on('change', function(){ 

if (keyTimer) { 
clearTimeout(keyTimer); 
} 

keyTimer = setTimeout(function() { 

doFunction(); // Formulates a string 

}, 200); // Delay before doFunction() so it won't slow down keyboard input 

var livecount = $("#myValue"); // String value from doFunction() 
if (livecount.val().length > 2800) { 
$(this).css('color','red'); // Change textarea text color to red for overlimit 
} else if (livecount.val().length <= 2800) { 
$(this).css('color','black'); // Change textarea text color to black for within limit 
} 

}); 

这是一个漫长的一天;-)

+0

提示 - 不要延迟函数执行,不会中断键盘输入,只有在绝对需要的情况下尽量减少延迟。 – koolness 2014-09-01 20:59:46

+0

我很高兴你明白了! – tylerlindell 2014-09-02 03:24:31

0

它看起来像只觉得在你的代码,缺少的是您正在使用的doFunction选择。您正在使用#myValue,但实际上正在查找#TEXTAREA内部的值。这是我jsfiddle

function doFunction(){ 
    console.log('not a test') 
} 

var keyTimer; 

$("#TEXAREA").on('keyup mouseup', function(){ 

    if (keyTimer) { 
     clearTimeout(keyTimer); 
    } 

    keyTimer = setTimeout(function() { 
     doFunction(); // Formulates a string 
     $("#TEXAREA").trigger('change'); 
    }, 1000); 

    }).on('change', function(){ 

    console.log('test'); // This triggers at every keyup/mouseup delay (500) 

    // This section of code must work after delay (500), but it doesn't, 
    // it only works on Textarea blur, which is not what I want: 

    var txtarea = $(this); 
    var livecount = $("#TEXAREA").val(); // Comes from doFunction() 
    if (livecount.length > 2800) { 
     txtarea.css('color','#C00'); // Change text color of textarea 
    } else if (livecount.length <= 2800) { 
     txtarea.css('color','#f00'); // Change text color of textarea 
    } 

}); 
+1

@ tlindell - 我希望这是简单的,但$(“#myValue”)。val ()包含我需要比较的所有连接的隐藏值的字符串,而不仅仅是从$(“#TEXAREA”)。val()。Thx用于种类输入 – koolness 2014-09-01 20:38:35