从JS运行jquery函数

时间:2015-05-12 18:29:43

标签: javascript jquery cordova phonegap-build

对于这个noobish问题感到抱歉,但今天对我没什么用。

我正在创建一个Phonegap应用程序,并将PushWoosh API集成到我的应用程序中。在接收推送通知时,我想再次运行我以前的功能,因此数据将会更新。

Pushwoosh有这样的JS功能:

document.addEventListener('push-notification',
    function(event) {
        var title = event.notification.title;
        var userData = event.notification.userdata;
        var notification = event.notification;

        if (typeof(userData) != "undefined") {
            console.warn('user data: ' + JSON.stringify(userData));
        }

        var object = JSON.parse(notification.u);

        window.runPushFunctions(object.active, object.open); //Runs a jQuery function I have created..

    }
);

现在window.runPushFunctions看起来像这样:

$(document).ready(function() {
    window.runPushFunctions = function(active, open) {

        if (active != null || active != undefined) {
            $('.hubs-page').removeClass('hubs-active').hide().eq(active).show().addClass('hubs-active');
        }

        if (open == 2) {
            $('html').addClass('hubs-opening');
        }

        //Trying to run functions from jQuery file that will get data from database and so on..
        received();
        sent();
        checkFriends();

    };
});

但由于某些原因,我无法运行received()sent()checkFriends()

这些函数在这样的文件中设置如下:

(function($) {

    'use strict';
    function checkFriends () {
      $.getJSON('url',function(data){
          $.each(data,function(index,value){
             //Do something with value
          });
      });
 }

我按此顺序包含文件:

file.js -> received(); sent();
file.js -> checkFriends();
file.js -> pushnotifications

欢迎任何帮助

2 个答案:

答案 0 :(得分:3)

正如这里的另一个答案所说,您正在确定方法定义,因此在包含方法之外的任何地方都无法访问它们。

(function($) {

这是方法定义。在其中非全局声明的任何变量或函数都无法在其外部访问。因此,您需要在其他地方定义函数,或者将它们设置为全局函数,以便可以访问它们。

如果你想在其他地方定义它们,你可以简单地将函数定义移到(function($) {})()范围之外的同一文件的顶部。

如果您改为使用全局定义,则需要稍微更改方法的定义行:而不是

function foo() { }

你需要

window.foo = function() { }

这将匿名声明的函数分配给window范围内的对象,该对象可全局访问。然后,您可以使用

调用它
window.foo();

或只是

foo();

因为它在window范围内。

答案 1 :(得分:1)

我并不确定我是否理解您的问题,但在我看来,您正在函数范围内定义函数checkFriends。如果需要访问该函数定义,则需要在可以从全局范围引用的对象上声明它。显然,最简单的方法是将它附加到窗口,尽管有很多理由不这样做。

window.checkFriends = function(){//code that does stuff};