Параметр 'e' в методе-прототипе функции не работает - PullRequest
0 голосов
/ 19 марта 2012

Я хочу использовать параметр e, чтобы остановить пузырь JavaScript

вот мой код:

function test(){}
test.prototype.method=function(parameter,e){
    console.log(parameter)
    e.preventDefault();
}
var t=new test();

$(function(){
    $('.node').click(function(){
       t.method($(this).attr('id'),e);
    });
});

однако, это не работает, firebug говорит мне, что «е не определено»

Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 19 марта 2012

На сайте звонка

t.method($(this).attr('id'),e);

нет символа с именем e в области видимости; поэтому браузер жалуется. Поскольку символы волшебным образом не появляются, вы хотите сообщить браузеру, что e - это первый аргумент, переданный в ваш обработчик click:

$('.node').click(function(e){ // ADDED FORMAL PARAMETER
   t.method($(this).attr('id'),e);
});

Вы знаете, что будет параметром, передаваемым обработчику, потому что документы говорят, что вашему handler будет присвоен eventObject - но, конечно, вы Назовите параметр по своему усмотрению.

0 голосов
/ 19 марта 2012

Сделано немного красивее.

Кстати, использование $(this).attr('id') - пустая трата ресурсов. Вы можете просто получить идентификатор, как я сделал в любимом коде.

$(function(){
    $('.node').on('click',function(e) {
       t.method(this.id,e);
    });
});

В вашем method вы должны расширить свой код следующим текстом:

if (e.preventDefault)
    e.preventDefault();
else
    e.stop();
0 голосов
/ 19 марта 2012

Изменить это:

$(function(){
    $('.node').click(function(){
       t.method($(this).attr('id'),e);
    });
});

К этому (вы забыли поставить e в своей функции)

$(function(){
    $('.node').click(function(e){
       t.method($(this).attr('id'),e);
    });
});
...