2012-01-09 2 views
1

У меня есть div contenteditable, и когда вы вводите его, через 2 секунды я пытаюсь изменить его цвет фона.Изменить цвет фона после X секунд при вводе ввода

Это мой код:

function changeFn(){ 
     $(this).css('background','red') 
     console.log($(this).attr('id')); 
    } 
var timer; 

    $("div.content").on("keypress paste", function() { 

     clearTimeout(timer); 
      timer = setTimeout(changeFn, 2000) 
    }); 

Кажется, что я должен передать $ (это) к функции, потому что она не распознанные $ это.

Когда я устанавливаю изменение цвета фона внутри функции нажатия клавиши, он работает.

jsFiddle: http://jsfiddle.net/uc8Tg/

ответ

1

Использование jQuery.proxy, который устанавливает контекст функции:

function changeFn() { 
    $(this).css('background', 'red'); 
} 
var timer; 

$("div.content").on("keypress paste", function() { 

    clearTimeout(timer); 
    timer = setTimeout($.proxy(changeFn, this), 2000); 
}); 

Пример:http://jsfiddle.net/uc8Tg/1/

+0

Большое спасибо. Я снова узнал от тебя что-то новое. – jQuerybeast

+0

@ jQuerybeast: Рад помочь, как всегда! –

0
function changeFn(){ 
    $(this).css('background','red') 
    console.log($(this).attr('id')); 
} 
var timer; 
$("div.content").on("keypress paste", function() { 
    clearTimeout(timer); 
    var self = this; 
    timer = setTimeout(function(){changeFn.call(self)}, 2000) 
}); 

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

+0

Спасибо. Я буду использовать ответ Эндрю, поскольку он использует меньше кодирования – jQuerybeast

+0

Но он медленнее –

+0

Действительно ли это медленнее? – jQuerybeast