Javascript Onkeyup Closures With Timeout
Im trying to assign an onKeyUp event to all inputs within a form, using closures. the array fields contains all the names of the fields that require the event assigned to them. The
Solution 1:
You can (and should) pass functions to setTimeout instead of strings.
clearTimeout(timer);
timer = setTimeout(function(){
    // your code here
}, 1000);
So, in your keyup, try something like this:
$('input[name='+fields[x]+']').keyup(function(field) { 
//assign an onKeyUp eventreturn function() {
        var that = this,
            $this = $(this);
        clearTimeout($this.data('timeout'));
        $this.data('timeout', setTimeout(function(){
            //some code using variable 'field' and array 'ajaxFields'// "this" will not be your element in here, make sure to use "that" (or "$this")
        }, 1000));
    };
}(fields[x]));
I save the timeout in $this.data, so that each element can have its own timeout, instead of using a global variable.
Updated Demo: http://jsfiddle.net/Z43Bq/3/
Solution 2:
This is what your code should look like:
var timer;
$(document).ready(function() {
    var fields = $('.field');
    var ajaxFields = $('.ajax-field');
    createEvents(fields, ajaxFields);
});
functioncreateEvents(fields,ajaxFields) {
    // Use jQuery's "foreach" method
    $(fields).each(function(inx, field) {
        // Bind the listener here
        $(field).keyup(function(ev) {
            // Clear timeout if necessaryif (timer != null) clearTimeout(timer);
            // Set the timeout
            timer = setTimeout(function() {
                // Your code should hereconsole.log('Fields: ', fields, '\nAjax Fields: ', ajaxFields, '\nTHE field: ', field);
            }, 1000);
        });
    });
}
Also checkout the fiddle for the working code: http://jsfiddle.net/BLyhE/
Post a Comment for "Javascript Onkeyup Closures With Timeout"