2014-09-01 2 views
0

Я использую это, чтобы вызвать функцию, как только паузу при наборе инициируется в текстовом поле:jQuery 2.1 | Функция триггера после задержки в текстовом поле

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

Вам нужна запятая между ваши события в вашем слушателе событий. «Ключ, мышь». Ожидается ли ваша функция в течение половины секунды до ее выполнения? – tylerlindell

+0

@tlindell Нет необходимости в запятых между событиями, использующими этот метод связывания. Код создан для запуска doFunction() на 500 мс. Вероятно, проблема заключается в том, что изменение текстовой области не начинается каждые 500 мс. Я вызываю изменение в textarea и все еще ничего. Предупреждающие триггеры в пределах функции, но до сих пор изменение в текстовой области не инициировано ;-( – koolness

+0

@tlindell - см. Обновление. Thx для ввода. – koolness

ответ

0

UPDATE - ЗАВЕРШЕНИЕ

Хорошо, получил это работает, наконец:

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

СОВЕТ. Не откладывайте выполнение функции, если она не работает. t нарушить ввод с клавиатуры. Попробуйте только с минимальной задержкой, если это абсолютно необходимо. – koolness

+0

Я рад, что вы это поняли! – tylerlindell

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

Смежные вопросы