2010-09-18 2 views
1

Я хочу, чтобы вызвать функцию OnClick и передать объект события к функции:правопреемником OnClick событие функционировать

progressBarOuter.onclick = function(e) { 
    var x; if (!e) { 
     x=window.event.clientX; 
    } 
     else { 
      x = e.clientX 
    } 

    yt.clickedOffset = x; yt.progressBarClicked 
} 

Так я задаю clickedOffset к заключая объект (УТ) и затем вызвать progressBarClicked, которые затем использует clickedOffset var. Но то, что я на самом деле хотел бы сделать, это примерно так:

progressBarOuter.onclick = yt.progressBarClicked(e); 

Потому что это намного компактнее. Проблема в том, что даже если пользователь нажал или не выполнил этот бит кода ... yt.progressBarClicked (e).

Есть ли способ обойти это?

ответ

6

Ваш

progressBarOuter.onclick = yt.progressBarClicked(e); 

не дает ожидаемого результата, потому что вы не присвоив функцию yt.progressBarClicked к onclick обработчика. Вы фактически вызываете функцию и поэтому присваиваете ее возвращаемое значение onclick.

Самый короткий рабочий вещь, которую вы можете получить, не нарушая ничего это:

progressBarOuter.onclick = function(e){ 
    yt.progressBarClicked((e || window.event).clientX); // pass the x position as a parameter 
}; 

Если вы не обернуть его, yt.progressBarClicked будет вызываться из window объекта и, следовательно, значение this внутри функции будет также устанавливается на объект window.

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

progressBarOuter.onclick = function(e){yt.progressBarClicked(e);}; 
+0

Привет, Да, я полностью понимаю, что происходит, просто подумал, есть ли другой метод, который я мог бы использовать, чтобы избежать дополнительной анонимной функции ... однако этот progressBarOuter.onclick = function (e) {yt.progressBarClicked (e);}; кажется довольно элегантным решением. Благодаря! –

+0

на самом деле просто делает progressBarOuter.onclick = yt.progressBarClicked; было достаточно ... progressBarClicked получает событие –

1

Попробуйте

progressBarOuter.onclick = yt.progressBarClicked; 

Но технически это не то же самое, что и исходный код. Вычисление для положения мыши (clientX) отсутствует вообще.

+0

Да, это моя проблема. Я хочу сделать то, что вы написали выше, но мне нужно передать это событие ... просто подумал, что может быть способ сделать это, что я не знал о –

+0

Событие будет автоматически передано в ваш ' progressBarClicked', поскольку это обратный вызов для события мыши. – Anurag

+0

Это нарушит 'this' внутри' yt.progressBarClicked', потому что функция вызывается из объекта 'window'. –

Смежные вопросы