2010-10-19 2 views
0

Я использую прототипы javascript-библиотек. Мой код ниже. Я создал класс, и в этом классе я создал прослушиватель событий для одного из методов класса. В этом методе мне нужно получить доступ к атрибутам элемента формы, которые запускают событие и свойства класса. В настоящее время код понимает $ (this) .getValue() в событии, потому что это назначается элементу формы, который вызвал событие. Как я могу получить доступ к свойствам this.makingRequest и this.user из функции события? Могу ли я передать их как параметры? Если да, то как? Ничто из того, что я пробовал до сих пор, не работает. Спасибо за любую помощь.Как получить доступ к переменным класса из события в Javascript?

function AddressBookEntryObj(user, selectField) 
{ 
    this.selectField = selectField; 
    this.user = user; 
    this.makingRequest = false; 
    this.debugMode = false; 

    Event.observe(this.selectField, 'change', handleEvent); 
} 

//Prototype statements 
AddressBookEntryObj.prototype.handleEvent = handleEvent; 
//End prototype statements 

function handleEvent() 
{ 
    try 
    { 
     if (!this.makingRequest) 
     { 
      this.makingRequest = true;  
      var ajax = 
       new Ajax.Request(
        '/servlet/MyReallyCoolServlet', 
        { 
         method:  'get', 
         parameters: { 
          action:   'doGet', 
          whichFunc:   'MyReallyCoolFunction', 
          fieldValue:  $(this).getValue(), 
          user:   this.user 
         }, 
         onCreate: handleAjaxCreate, 
         onComplete: handleChangeComplete 
        } 
       ); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch (ex) 
    { 
     alert("handleEvent Error: \r\n" + ex.toString()); 
    } 
} 

Спасибо!

Эндрю

ответ

0

jsfiddle example

Взгляните на эту jsfiddle я сделал с вашим кодом. Вам нужно было добавить «bind (this)» к обработчику обратного вызова. Выполнение этого сделает «это» вашим объектом и будет использовать «e.target» для доступа к элементу html.

_Michael

+0

Спасибо, мужчина. Раньше я это пробовал, но, очевидно, что-то ввернул. Я ценю помощь. jsfiddle довольно круто, кстати. –

+0

Нет проблем и да. Скалы JSFiddle, это мой инструмент goto, когда мне нужно бежать, снимая что-то с минимальным минимумом. – subhaze

0

Во-первых использовать:

AddressBookEntryObj.prototype.handleEvent = function() 
{ 
} 

Тогда this внутри handleEvent должен указывать на AddressBookEntryObj. Для того, чтобы убедиться, что он будет работать везде внутри этого использовать функцию что-то вроде:

var _this = this; 

И затем использовать _this внутри каких-либо обработчиков событий.

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