扩展jQuery方法时如何传递参数?

伍德罗茂

我试图进行修改.offset(),使其永远不会返回undefined,即不可见/隐藏的元素。

this老实说,我遇到的问题是我不知道如何正确地传递给原始方法。断点调试显示,我一直Window在知道何时应该将它作为有问题的元素。这是我得到的:

(function( $ ){
  var original = $.fn.offset;

  $.fn.offset = function( elem, coordinates, pass ) {
    console.log('step 1');   // successful.
    console.log(this);       // element confirmation.
    var o = original(elem, coordinates, pass);  // triggers an exception.
    console.log('step 2');   // is never reached.

    if (o === undefined ) {
      console.log('step 3a');
      return {};
    }
    else {
      console.log('step 3b');
      return o;
    }
  }
}( jQuery ));

[…]

$('#element').offset();   // method call.

这是一个例外:

Error in event handler for (unknown): TypeError: undefined is not a function
    at jQuery.fn.extend.offset (chrome-extension://…/js/jquery-1.11.0.js:10109:10)
    at $.fn.offset (chrome-extension://…/js/jquery-modifications.js:35:11)

我已经尝试了不同的变化- ,original(arguments) -但没有奏效。这个问题中在另外三个参数旁边使用了一个称为–的参数-但我不确定为什么。是不是因为API提到和一个回调函数?如果是这样,那么我的尝试应该可以工作,类似于API查看jQuery如何定义这些功能也没有帮助,因为它甚至没有显示出来this.original()original(this, …)elemattributeNamevalue.offset().fn.attr.fn.offset

印地

如你所说:

老实说,我遇到的问题是我不知道如何正确地将其传递给原始方法。

为了更改函数范围(此),有两种函数原型方法,称为call()apply()

对这两种方法的文档的引用:

Function.prototype.call()

Function.prototype.apply()

因此,您的代码现在应如下所示:

var original = $.fn.offset;

$.fn.offset = function() {
    var o = original.apply(this, arguments);
    return typeof o === 'undefined' ? {} : o;
};

return typeof o === 'undefined' ? {} : o;

这只是(IMO)的更好的简短版本:

if (typeof o === 'undefined') {
    return {};
} else {
    return o;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用.agg()方法时如何传递参数?

来自分类Dev

调用方法时如何传递参数(反射)?

来自分类Dev

将构造函数作为参数值传递时,jquery数据方法如何工作?

来自分类Dev

将方法扩展作为参数传递

来自分类Dev

单击按钮时如何调用方法并传递参数?

来自分类Dev

扩展泛型类时如何传递多个泛型参数

来自分类Dev

jQuery插件-如何传递参数

来自分类Dev

如何传递jQuery方法

来自分类Dev

从排序方法调用参数时,如何将参数传递给回调

来自分类Dev

从排序方法调用参数时,如何将参数传递给回调

来自分类Dev

通过JSON传递时获取方法的参数

来自分类Dev

传递方法参数时防止数组越界

来自分类Dev

Mockito:当方法的返回类型为void时,如何获取传递给方法的参数

来自分类Dev

如何在odoo中从新的api方法调用旧的api方法时传递id参数

来自分类Dev

使用资源服务时如何传递参数?

来自分类Dev

部署WAR文件时如何传递参数?

来自分类Dev

调用`source`命令时如何传递参数

来自分类Dev

将参数传递给jQuery插件时,如何为JavaScript对象指定变量属性

来自分类Dev

当数据类型为XML时,如何将url参数传递给AJAX jquery?

来自分类Dev

如何通过变量扩展将参数传递给ENTRYPOINT?

来自分类Dev

如何防止Bash扩展传递以“-”开头的文件作为参数?

来自分类Dev

如何将参数从 Jupyter 后端传递到前端扩展

来自分类Dev

如何有时使用参数调用方法,有时又不使用javascript传递参数并做出反应?

来自分类Dev

循环jQuery ajax并传递参数的正确方法

来自分类Dev

如何指定ForEachAsync扩展方法的Dop参数?

来自分类Dev

如何使用.on在jquery中传递参数?

来自分类Dev

如何通过URL在jQuery中传递参数?

来自分类Dev

如何传递参数datasrc DataTables Jquery?

来自分类Dev

将参数传递给MVC控制器中的方法时如何防止Url编码

Related 相关文章

  1. 1

    使用.agg()方法时如何传递参数?

  2. 2

    调用方法时如何传递参数(反射)?

  3. 3

    将构造函数作为参数值传递时,jquery数据方法如何工作?

  4. 4

    将方法扩展作为参数传递

  5. 5

    单击按钮时如何调用方法并传递参数?

  6. 6

    扩展泛型类时如何传递多个泛型参数

  7. 7

    jQuery插件-如何传递参数

  8. 8

    如何传递jQuery方法

  9. 9

    从排序方法调用参数时,如何将参数传递给回调

  10. 10

    从排序方法调用参数时,如何将参数传递给回调

  11. 11

    通过JSON传递时获取方法的参数

  12. 12

    传递方法参数时防止数组越界

  13. 13

    Mockito:当方法的返回类型为void时,如何获取传递给方法的参数

  14. 14

    如何在odoo中从新的api方法调用旧的api方法时传递id参数

  15. 15

    使用资源服务时如何传递参数?

  16. 16

    部署WAR文件时如何传递参数?

  17. 17

    调用`source`命令时如何传递参数

  18. 18

    将参数传递给jQuery插件时,如何为JavaScript对象指定变量属性

  19. 19

    当数据类型为XML时,如何将url参数传递给AJAX jquery?

  20. 20

    如何通过变量扩展将参数传递给ENTRYPOINT?

  21. 21

    如何防止Bash扩展传递以“-”开头的文件作为参数?

  22. 22

    如何将参数从 Jupyter 后端传递到前端扩展

  23. 23

    如何有时使用参数调用方法,有时又不使用javascript传递参数并做出反应?

  24. 24

    循环jQuery ajax并传递参数的正确方法

  25. 25

    如何指定ForEachAsync扩展方法的Dop参数?

  26. 26

    如何使用.on在jquery中传递参数?

  27. 27

    如何通过URL在jQuery中传递参数?

  28. 28

    如何传递参数datasrc DataTables Jquery?

  29. 29

    将参数传递给MVC控制器中的方法时如何防止Url编码

热门标签

归档