4

我试图onchange理解bootstrap-multiselect. 特别是,我试图了解函数语法和参数。

$('#example-onChange').multiselect({
     onChange: function(option, checked, select) {
            alert('Changed option ' + $(option).val() + '.');
           }
});

如何知道函数中的三个参数是什么意思?我从哪里得到这三个参数?我还尝试查看代码https://github.com/davidstutz/bootstrap-multiselect/blob/master/dist/js/bootstrap-multiselect.js#L263但无法理解。

我知道在此功能选项中使用警报指的是所选选项,checked显示该选项是checked还是unchecked. undefined我在函数内部做的时候不断得到console.log(select),所以不知道这是什么意思。

问题:如何理解这些函数参数和语法?这只是一个示例,但了解通用过程将帮助我在将来解码其他类似功能。

4

2 回答 2

3

简而言之,该库似乎实际上并未提供该select选项。


一般来说,在文档不是很精确的情况下,我经常应用的技术是console.logarguments然后检查它们每个的样子。

在这种情况下,执行以下操作时:

$('#example-onChange').multiselect({
    onChange: function(option, checked, select) {
        console.log(arguments);
    }
});

...我得到以下输出:

在此处输入图像描述

...从这里你可以看到提供了两个参数。第一个是被点击选项的 jQuery 对象。第二个(您可以假设)是关于是否选择该选项的布尔值。

您还可以看到没有select提供(第三个参数)。


您可以采取的另一种方法是像您一样搜索源代码;但我建议查找调用函数的位置,而不是定义函数的位置。onChange通过在源代码中搜索,可以看到onChange至少被调用了 3 次。

  1. this.options.onChange($option, checked);
  2. this.options.onChange($option, true);
  3. this.options.onChange($option, false);

...没有一个提供第三个论点。我在这里说至少 3 次,因为有时(特别是在大型库中)很难找到所有调用站点,因为开发人员可以用各种奇怪而奇妙的方式掩盖它们


您可以使用的其他技术:

  1. 在处理程序函数中设置断点(使用开发工具的“断点”功能或通过debugger语句),触发处理程序,然后按照调用堆栈(再次使用开发人员工具)检查调用站点,并查看提供了哪些变量。

  2. 在相应的 GitHub 项目上打开一个问题。您会发现很多图书馆所有者非常乐意提供帮助。

于 2015-06-29T09:54:33.950 回答
1

不幸的是,所有 Javascript 库都必须有一个非常健壮的文档。

此外,Javascript 是一种动态类型语言,因此没有关于形式参数所需类型的信息。如果没有良好的文档,它会使库更难理解。

为了快速理解,结合经验,可以使用一些思维机制。例如,事件委托的参数提供有关它发生的元素的信息。就像这些参数是返回给您的值。

在您的示例中,选项、检查和选择有可能与 #example-onChange 中定义的多选中的选项元素有关,该元素已更改(onChange)。

示例 1:

onClose:function(success)
{
    //TODO
}

在这种情况下,“成功”应该意味着:如果关闭我的元素成功,则此参数为真,否则“成功”为假。

示例 2:

afterSave:函数(成功,文件名){

}

在这种情况下,“文件名”应该是执行保存操作后保存元素的文件名。

我尽我所能写出正确的英语,我希望它是可以理解的。

于 2015-06-29T10:05:17.310 回答