2016-06-27 2 views
2

Я новичок в метеор, и у меня возникла проблема в событии click.Невозможно получить входное значение с помощью события click в meteorjs

Код:

Template.addPost.events({ 
'click button':function(event){ 
    event.preventDefault(); 
    var postName=event.target.postName.value; 
    Posts.insert({ 
     name:postName, 
     createdAt:new Date() 
    }); 
    event.target.postName.value=''; 
    } 
}); 

HTML код:

<template name='addPost'> 
    <input type='text' placeholder='Add post here' name='postName'> 
    <button class="btn btn" type="button">Post</button> 
</template> 

Однако в браузере на нажатии кнопки значение ввода не вставлена ​​в базу данных Монго.

+0

вы уверены, что событие не уволили? Может быть, пожары событий, но добавление к сбору сбоев из-за отсутствия разрешения? Вы можете console.log в обработчике событий, чтобы убедиться, что он срабатывает или нет. – Areca

+0

var postName = event.target.postName.value; <- postName не находится внутри event.target. Сначала попробуйте отладить. console.log (event.target) или указать id для ввода id = "myinput" -> var postName = $ ('# myinput'). val(); – iiro

+0

@iiro Сэр Я разместил console.log (postName); перед Posts.insert, и он ничего не показывал в консоли. Однако при предоставлении id = 'myinput' и использовании var postName = $ ('# myinput'). val(); он работал отлично. Возможно, пожалуйста, скажите мне, почему он не работает с использованием кода javascript. –

ответ

1

Событие click находится на кнопке, но вы хотите сослаться на значение поля ввода в вашей вставке. У вас уже есть name для input области, так что вы можете обратиться к нему с помощью JQuery и селектором имя:

Template.addPost.events({ 
'click button': function(event){ 
    event.preventDefault(); 
    var postName = $('input[name="postName"]').val(); 
    Posts.insert({ name: postName, createdAt: new Date() }); 
    $('input[name="postName"]').val(''); 
    } 
}); 
+0

Сэр в javascript 'postName' не работает, так как он не является частью целевой задачи (кнопка), но использование jQuery 'postName' отлично работает. Почему? –

+0

jQuery просматривает всю DOM и выбирает элементы, которые вы хотите, на основе _selector_ - в этом случае '' input [name = "postName"] '' –

0

Информация, которую вы предоставили, очень ограничена. Есть несколько различных сценариев.

Вы уверены, что используете подходящее событие? Выше вашего метода Posts.insert() попробуйте console.log переменную postName.

Вы избавились от автоматических и небезопасных пакетов?

+0

Сэр, как я упомянул, я разместил console.log (postName); перед Posts.insert, и он ничего не показывал в консоли. –

+0

Не забудьте также проверить CLI. Если он показывает «неопределенный» или что-то подобное, вы вызываете правильный метод, но получаете неправильный ввод. Если вы ничего не видите, как вы упомянули, попробуйте проверить свои события. Начните оттуда. Удачи. :) –

1

Вы не можете получить доступ к значению входного postName с

var postName=event.target.postName.value; 

postName не является членом цели события (которое само по себе кнопка). Добавление атрибута id для ввода и доступа к значению над ним решит вашу проблему. Поэтому обращайтесь к нему:

postName = $('#myinput').val(); 
+1

Другим вариантом, позволяющим правильно настроить таргетинг на данные входного поля, является ввод входов и кнопок в форму. Затем, используя кнопки как «отправить», поля формы будут доступны через «цель». .value' также, так как '

' теперь является целью. – robertdavid

+0

Спасибо, теперь я получаю его. Поскольку «id» является глобальным атрибутом, поэтому он должен использоваться вместо атрибута name. Большое спасибо. –