2013-07-31 6 views
1

Функция не работает, она не помещает значения в «ввод».Как наследовать класс в javascript?

function example(id){ 
    this.code= function(){$('.'+id).val(id)} 
    this.validate= function(){ 
     $('.'+id).keyup(function (e){ 
      if(e.keyCode==13) this.code(); 
     }) 
    } 
} 

тело

<input type="text" class="test"/> 
<input type="text" class="test1"/> 
<script type="text/javascript"> 
    var test= new example('test') 
    var test1= new example('test1') 
    test.validate() 
    test1.validate() 
</script> 
+0

Я думаю, что функции внутри «example» получит «undefined» вместо «id». Вы должны сохранить id в каком-то частном var в примере функции. – MightyPork

+0

@MightyPork: нет, функция в 'this.code' наследует область родительской функции и будет иметь знания о' id' var. – NDM

+0

вы знаете, что ваша функция 'validate()' просто регистрирует обработчик 'keyup' и фактически не выполняет проверку? – NDM

ответ

4

Ваш KeyUp обработчик события будет иметь другой "это". Вы можете использовать привязку исправить неполадку

keyup(function (e){ 
if(e.keyCode==13) this.code(); 
}.bind(this)) 

При привязке к событию, обработчик вызывается с «этого» набора ключевых слов к объекту, который уволил событие, а не объект, который создал событие.

+0

спасибо, он отлично работает – Carlos

+0

@amit, если это решает ваш вопрос, принимаем как ответ PLS ... – NDM

+0

Еще одна вещь. вы связываете «это» с событием keyup и наследуете «this» к его родительской функции. Если моя функция keyup внутри - это еще одна функция, и если я хочу наследовать «это» родительской функции, то как ее связать. – Carlos

1

Ну Javascript немного трудно понять, когда дело доходит до этого ..

эта статья объясняет некоторые из них http://www.crockford.com/javascript/inheritance.html Но один способ решить это будет

function example(id){ 
    this.code= function(){$('.'+id).val(id)} 
    var self = this; 
    this.validate= function(){ 
     $('.'+id).keyup(function (e){ 
      if(e.keyCode==13) self.code(); 
     }); 
    } 
} 
Смежные вопросы