【问题标题】:Having different javascript files share the same function不同的 javascript 文件共享相同的功能
【发布时间】:2023-03-20 14:05:01
【问题描述】:

现在我正在为 WordPress 创建一些插件。所有这些都需要单独工作,但我想添加一个实现让它们一起工作。

对于初学者,所有脚本都将使用自定义名称来引用 jQuery,这是我的问题开始的第一部分。在 WordPress 中,我有一个组合对象,我想用所有值填充它。组合对象命名为:myObject

现在我试试这个,但它不起作用:

if( typeof myObject.jq !== 'undefined' )
    myObject.jq = jQuery.noConflict();

myObject.jq(document).ready(function(){

}

我收到错误消息 'myObject.jq' is not a function。

我想用一个组合的 ajax 函数进一步扩展它,像这样

if( typeof myObject.jq !== 'undefined' ){
    myObject.jq = jQuery.noConflict();

    myObject.ajaxcall = function(action){
        var dfr = myObject.jq.Deferred();
        myObject.jq.ajax({
            url:myObject.ajaxurl,
            type:'post',
            data:{
                action:action,
                face:myObject.face
            },
            dataType:'json',
            success:dfr.resolve
        });
        return dfr.promise();
    };
}

myObject.jq(document).ready(function(){
    // My code here
}

这完全行不通。任何人都知道我怎样才能让它工作?

【问题讨论】:

  • 什么是'jq'属性?它已经包含了什么(因为您测试它是 NOT undefined)。
  • 哦,这真是愚蠢!

标签: javascript jquery jquery-deferred


【解决方案1】:

你只是把“未定义”的逻辑倒过来了。你应该说typeof myObject.jq === 'undefined'。虽然,由于 jq 预计是一个函数,但更好的检查是 typeof myObject.jq !== 'function'

【讨论】:

    【解决方案2】:

    要使您的第一个工作,您需要将myObject 声明为object。而且javaScript会自动分配未定义的对象标识符,所以你不需要测试key是否存在。因此,将您的代码更改为以下内容即可:

    var myObject = {};
    myObject.jq = jQuery.noConflict();
    myObject.ajaxcall = function(action) {
     //You function code
    };
    
    myObject.jq(document).ready(function(){
      //Your code goes here
    });
    

    这将导致以下myObject

    myObject
      ajaxcall: function (action) { }
      jq: function (a,b){return new d.fn.init(a,b,g)}
    

    【讨论】:

    • 哦,上面的脚本中已经定义了 myObject。我只是把!== 弄错了,真是愚蠢的错误。瑞恩的答案是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多