2011-11-17 70 views
0

现在我正在为WordPress创建一些插件。所有需要单独工作,但我想添加一个实现,让他们一起工作。拥有不同的JavaScript文件共享相同的功能

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

现在我尝试这一点,但它不工作:

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

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

} 

我得到错误信息'myObject.jq'不是一个函数。

我想用一个结合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 
} 

这完全不起作用。任何人都有任何想法,我怎么能得到这个工作?

+0

什么是“JQ”属性?它已经包含了什么(因为你测试它是** NOT ** _undefined_)。 –

+0

哦,这真的很愚蠢! –

回答

0

你只是有'未定义'的逻辑倒退。你应该说typeof myObject.jq === 'undefined'。虽然,由于jq预计是一个函数,更好的检查将是typeof myObject.jq !== 'function'

+0

噢,哇,这是一个愚蠢的错误。抱歉! –

+0

适用于我们所有人;) – Ryan

0

为了您的第一件作品,您需要声明myObjectobject。而且javaScript会自动分配未定义的对象标识符,所以你不需要测试这个键是否存在。因此,改变你的代码,下面的工作:

var myObject = {}; 
myObject.jq = jQuery.noConflict(); 
myObject.ajaxcall = function(action) { 
//You function code 
}; 

myObject.jq(document).ready(function(){ 
    //Your code goes here 
}); 

这WIL结果在下面myObject

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

哦,上面的脚本中没有定义myObject。我只是有'!=='错误,真是愚蠢的错误。瑞恩有正确的答案。 –

相关问题