Javascript функция сработала на событие - получить цель? - PullRequest
1 голос
/ 16 февраля 2011

Я использую API JavaScript Javascript, но это может даже не быть вопросом, напрямую связанным с этим API.

ytplayer.addEventListener("onStateChange", "foo");

Если состояние "ytplayer" меняется, то foo запускается!

function foo() {
    //how to get "ytplayer" in here?
}

Можно ли узнать, что вызвало функцию foo() внутри функции foo()?Звучит странно, и это трудно объяснить.Просто представьте, что у меня есть несколько ytplayer, таких как ytplayer1, ytplayer2 и т. Д., И каждое видео запускает одну и ту же функцию foo() при изменении его состояния.

Возможно ли получить функцию foo (), запущенную из ytplayer, внутри foo ()функционировать?Извините, я не могу объяснить это лучше!:)

edit:

Просто чтобы вы поняли, что я делаю!

/*Control Youtube videos with swfobject*/
function onYouTubePlayerReady() {
    var $ytid = '',
        ytid = '';
    $('object[id^="ytplayer_"]').each(function() {
        $ytid = $(this).attr('id');
        ytid = document.getElementById($ytid);
        ytid.addEventListener("onStateChange", "(function(status){foo(status,"+$ytid+");})");
        ytid.unMute(); 
        ytid.setVolume(100);
    });
};

function foo( status, player ) {
    console.log(status);
    console.log(player);
    //var pl = player;
}

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Похоже, что единственный доступный параметр представляет состояние.

Поскольку кажется, что вы передаете оцениваемую строку, вам может потребоваться создать отдельную функцию для каждой из них:

function foo( status, player ) {
    // do something with status and player
}

ytplayer1.addEventListener("onStateChange", "foo1");
function foo1( status ) {
    foo( status, ytplayer1 );
}

ytplayer2.addEventListener("onStateChange", "foo2");
function foo2( status ) {
    foo( status, ytplayer2 );
}

ytplayer3.addEventListener("onStateChange", "foo3");
function foo3( status ) {
    foo( status, ytplayer3 );
}

или вы можете попробовать передать всю строку анонимной функции:

function foo( status, player ) {
    // do something with status and player
}

ytplayer1.addEventListener("onStateChange", "(function(status){foo(status,ytplayer1);})");

ytplayer2.addEventListener("onStateChange", "(function(status){foo(status,ytplayer2);})");

ytplayer3.addEventListener("onStateChange", "(function(status){foo(status,ytplayer3);})");    

РЕДАКТИРОВАТЬ: * Общий пример создания уникальных функций в пространстве имен.

    // gets called by the namespaced functions
function foo( status, player ) {
    // do something with status and player
}

  // create some namespace
window.myNamespace = {};

  // this gets called to create a new function in the namespace,
  //     and call addEventListener, which references the proper function
function funcFactory( player, i ) {

        // create a new function in myNamespace
    window.myNamespace[ "foo" + i ] = function( status ) {
        foo( status, player );
    };
        // Add event listener that calls that function
    player.addEventListener( "onStateChange", "window.myNamespace.foo" + i );
}

   // your loop
for( var i = 1; i < 10; i++ ) {
    var playa = someGeneratedPlayer();
    funcFactory( playa, i );
}
1 голос
/ 16 февраля 2011

этот должен содержать требуемый объект.

...