Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery插件开发-将参数传递给用户定义的回调函数_Javascript_Jquery - Fatal编程技术网

Javascript jQuery插件开发-将参数传递给用户定义的回调函数

Javascript jQuery插件开发-将参数传递给用户定义的回调函数,javascript,jquery,Javascript,Jquery,提前谢谢大家。这是我第一次开发jQuery插件(事实上也是第一次用javascript开发),我不得不说我非常古怪(对于经验丰富的js/jQuery开发人员来说,它可能有很多可怕的东西,但这是我第一次尝试——请耐心听我说:)。我也欢迎任何对守则的建设性批评 这是一个model box插件(是的,还有其他插件,但工作要求要求我自己编写代码以避免第三方依赖),它显示给定的文本、来自ajax调用的文本或来自ajax调用的给定/获取的表单,然后通过ajax处理表单提交。这需要尽可能的自定义,所以我尝试提

提前谢谢大家。这是我第一次开发jQuery插件(事实上也是第一次用javascript开发),我不得不说我非常古怪(对于经验丰富的js/jQuery开发人员来说,它可能有很多可怕的东西,但这是我第一次尝试——请耐心听我说:)。我也欢迎任何对守则的建设性批评

这是一个model box插件(是的,还有其他插件,但工作要求要求我自己编写代码以避免第三方依赖),它显示给定的文本、来自ajax调用的文本或来自ajax调用的给定/获取的表单,然后通过ajax处理表单提交。这需要尽可能的自定义,所以我尝试提供一些钩子(??-匿名函数),用户可以使用这些钩子将自定义代码传递给插件

我遇到的问题是为用户函数提供参数。如果我使用关键字'this',我可以传递'msg'变量fine,并且用户函数可以使用它。但是当我传递'msg'而不是'this'时,用户会得到一个空变量。我想传递的不仅仅是msg,我真正想做的还包括在ajax调用中传递的数据数组和ModelBox的jQuery对象

下面是代码片段-该函数位于插件内部并在插件中调用;我只是出于组织/开发的目的将一些代码分组到函数中

    // Submits the form inside of the model box
    // and calls the user hooks of onFormSuccess and
    // onFormFailure for ajax success and error
    function submitForm() {
        var URL = $('form',$contentNode).attr('action'), 
        method = $('form',$contentNode).attr('method'),
        data = $('form',$contentNode).formSerialize();

        $.ajax({
            url: URL,
            type: method,
            data: data,
            success: function(msg) {
                // Doesn't work, but I would like it too
                //settings.onFormSuccess.call(msg, breakData(data) );
                // Does work
                settings.onFormSuccess.call(this);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                setings.onFormFailure.call(errorThrown);
            }
        });
        closeModel();
    }
看。第一个参数确定回调函数本身中的
内容。它不会作为参数传递给回调函数

要向回调传递参数,请使用
call
的其余参数:

settings.onFormSuccess.call(thisArg, msg, dataArray);
然后,回调将接收两个参数,并在指向
thisArg
this
下运行:

function successHandler(msg, dataArray) {}
代码的另一个问题是,成功处理程序中的
this
的值没有意义。从它看起来的样子来看,它只会指向
窗口
对象。因此,您调用的回调也将与
this==窗口一起运行,请参见。第一个参数确定回调函数本身中的
内容。它不会作为参数传递给回调函数

要向回调传递参数,请使用
call
的其余参数:

settings.onFormSuccess.call(thisArg, msg, dataArray);
然后,回调将接收两个参数,并在指向
thisArg
this
下运行:

function successHandler(msg, dataArray) {}

代码的另一个问题是,成功处理程序中的
this
的值没有意义。从它看起来的样子来看,它只会指向
窗口
对象。因此,您调用的回调也将使用
this==window

tl-dr;你能提供一个较短的例子吗?你能提供一个简短的例子吗?