2016-06-09 2 views
1

Это основной вопрос JavaScript, но тем не менее отправил меня на поиски в Google. На основании this article приведенный ниже код должен работать, однако я получаю ошибку event.target is not a function в saveBubble. Когда я пробую event в отладчике, ошибка читается Uncaught: illegal access. arguments массив имеет необходимое событие, но почему он не работает, когда я звоню event?Обработчик события компонента реакции - не может получить доступ к событию

export default class Bubble extends Component { 
    saveBubble(event) { 
    Bubbles.insert({ 
     text: event.target.attr('value') // <- throws an error here 
    }) 
    } 

    body() { 
    const { text } = this.props.bubble; 

    if (text) { 
     return text; 
    } 
    else { 
     return (
     <input type='text' onBlur={ this.saveBubble.bind(this) }/> 
    ) 
    } 
    } 

    render() { 
    return (
     <div className='bubble-wrapper'> 
     <div className='body'> 
      { this.body() } 
     </div> 
     </div> 
    ); 
    } 
} 
+0

Я думаю, что 'this' в' теле() 'функция не то, что вы думаете. Попробуйте привязать его в 'render()'. – ivarni

+0

@ivarni В обоих 'saveBubble' и' body', 'this' является объектом Bubble –

+0

Я также заметил, что если я попрошу о событии, он даст мне ошибку« Невыпущенный доступ ». Но если я попрошу event.target, похоже, это сработает. – stealthysnacks

ответ

4

Я думаю, что вы, вероятно, хотите event.target.value вместо event.target.attr('value'). Это даст вам текущее значение во входном элементе, как описано в разделе react docs.

Я предполагаю, что вы действительно получаете event.target.attr is not a function в качестве сообщения об ошибке, так как элемент dom (например, event.target) не имеет этого метода, например, например, объект jquery.

Чтобы добавить немного больше ясности, я считаю, что это должно работать для вас:

saveBubble(event) { 
    Bubbles.insert({ 
    text: event.target.value 
    }) 
} 
+0

Вы правы. Уже поздно, и я неправильно понял ошибку. Я все еще озадачен тем, почему он выбрасывает мне ошибку незаконного доступа в консоли. –

+0

Да, я никогда раньше этого не видел. Быстрый google показывает, по крайней мере, несколько других людей тоже озадачены этим, поэтому вы не одиноки. – dougshamoo

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