This may work for you. You actually create the function in the config
options you pass to the control. I changed the reference in the setup
and in the adjustValue functions as well. This isn't tested but
hopefully should work.
var myOptions = {
min: 0,
// Set lower limit.
max: 100,
// Set upper limit.
step: 1,
// Set increment size.
spinClass: mySpinBtnClass, // CSS
class to style the spinbutton.
(Class also specifies url of the up/down button image.)
upClass: mySpinUpClass, // CSS
class for style when mouse over
up button.
downClass: mySpinDnClass, // CSS
class for style when mouse over
down button.
callback: function() { // put your code
here }
}
$.fn.SpinButton = function(cfg){
return this.each(function(){
// Apply specified options or defaults:
// (Ought to refactor this some day to use $.extend()
instead)
this.spinCfg = {
//min: cfg && cfg.min ? Number(cfg.min) :
null,
//max: cfg && cfg.max ? Number(cfg.max) :
null,
min: cfg && !isNaN(parseFloat(cfg.min)) ?
Number(cfg.min) :
null, // Fixes bug with min:0
max: cfg && !isNaN(parseFloat(cfg.max)) ?
Number(cfg.max) : null,
step: cfg && cfg.step ? Number(cfg.step) : 1,
page: cfg && cfg.page ? Number(cfg.page) : 10,
upClass: cfg && cfg.upClass ? cfg.upClass :
'up',
downClass: cfg && cfg.downClass ?
cfg.downClass : 'down',
reset: cfg && cfg.reset ? cfg.reset :
this.value,
delay: cfg && cfg.delay ? Number(cfg.delay) :
500,
interval: cfg && cfg.interval ?
Number(cfg.interval) : 100,
_btn_width: 20,
_btn_height: 12,
_direction: null,
_delay: null,
_repeat: null,
callback: cfg && cfg.callback ? cfg.callback :
null /* fixed here*/
};
this.adjustValue = function(i){
var v = (isNaN(this.value) ?
this.spinCfg.reset :
Number(this.value)) + Number(i);
if (this.spinCfg.min !== null) v = Math.max(v,
this.spinCfg.min);
if (this.spinCfg.max !== null) v = Math.min(v,
this.spinCfg.max);
if ($.isFunction(this.spinCfg.callback))
this.spinCfg.callback(); /* fixed here */
this.value = v;
};
On May 2, 11:04 am, Chris Hall <[EMAIL PROTECTED]> wrote:
> Hello everyone.
>
> I am trying to modify the SpinButton code (from
> herehttp://www.softwareunity.com/sandbox/jqueryspinbtn/) to include a
> callback when the value is changed.
>
> I'm very new to callback functions and have tried searching the web
> for how to add them but so far have had no luck.
>
> My desired goal is to be able to pass a function or not and if the
> function is included have it executed when the spinner button is
> clicked.
>
> Here is what I have tried (along with the original code):
>
> $.fn.SpinButton = function(cfg){
> return this.each(function(){
>
> // Apply specified options or defaults:
> // (Ought to refactor this some day to use $.extend() instead)
> this.spinCfg = {
> //min: cfg && cfg.min ? Number(cfg.min) : null,
> //max: cfg && cfg.max ? Number(cfg.max) : null,
> min: cfg && !isNaN(parseFloat(cfg.min)) ?
> Number(cfg.min) :
> null, // Fixes bug with min:0
> max: cfg && !isNaN(parseFloat(cfg.max)) ?
> Number(cfg.max) : null,
> step: cfg && cfg.step ? Number(cfg.step) : 1,
> page: cfg && cfg.page ? Number(cfg.page) : 10,
> upClass: cfg && cfg.upClass ? cfg.upClass : 'up',
> downClass: cfg && cfg.downClass ? cfg.downClass :
> 'down',
> reset: cfg && cfg.reset ? cfg.reset : this.value,
> delay: cfg && cfg.delay ? Number(cfg.delay) : 500,
> interval: cfg && cfg.interval ? Number(cfg.interval)
> : 100,
> _btn_width: 20,
> _btn_height: 12,
> _direction: null,
> _delay: null,
> _repeat: null,
> callback: function(){} /* I added this*/
> };
> this.adjustValue = function(i){
> var v = (isNaN(this.value) ? this.spinCfg.reset :
> Number(this.value)) + Number(i);
> if (this.spinCfg.min !== null) v = Math.max(v,
> this.spinCfg.min);
> if (this.spinCfg.max !== null) v = Math.min(v,
> this.spinCfg.max);
> callback(); /* I added this)
> this.value = v;
> };
>
> when trying to run this I get callback is not defined.
>
> Any help is greatly appreciated!!!