I have a textarea that on keyup calls a function when a certain word or phrase has been entered, but also calls another function which undoes the initial function, if the word or phrase is then deleted.
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$("#id_message").on('keyup', function(){
for(var i=0;i<phraseList.length;i++){
if($('#id_message').val().toLowerCase().indexOf(phraseList[i]) > -1){
doEgg();
}else{
undoEgg();
}
}
});
However on every keyup the value of indexOf is temporarily set to -1 until it has made its way through the characters and found the offending word.
So this causes doEgg(); and undoEgg(); to be called repeatedly in quick succession, which is not what I want to happen.
Is there any way to calculate .indexOf() but only after the text area has been looked over? So it assigns a value to indexOf() only once.
From what I know onChange doesn't work for what I need as I want the functions to run as the person types rather than when the whole textarea has been completed.
Thanks
EDIT.
The functions being called are:
function doEgg(){
// if(changeback)clearInterval(changeback);
audioElement.play();
// var change = setInterval(function () {
change = setInterval(function () {
var all = $('#wall_container').find('img').not('.easter');
var random = Math.floor(Math.random()*all.length)
var Rimg = $( all[random] )
var cdown = all.length;
var r = 1+Math.floor(Math.random()*33);
Rimg.attr('data-oldsrc', Rimg.attr('src')).attr('src', 'http://localhost:8888/wp-content/uploads/crying/crying'+r+'.gif').addClass('easter');
if(cdown==0){
clearInterval(change);
}
}, 500)
}
function undoEgg(){
// if(change)clearInterval(change);
audioElement.pause();
// var changeback = setInterval(function () {
changeback = setInterval(function () {
var all = $('#wall_container').find('img').filter('.easter');
var random = Math.floor(Math.random()*all.length)
var Rimg = $( all[random] )
var cdown = all.length;
Rimg.attr('src', Rimg.attr('data-oldsrc')).removeClass('easter');
if(cdown==0){
clearInterval(changeback);
}
}, 500)
}