2016-07-11 7 views
1

У меня возникла проблема с использованием jQuery для извлечения элемента Span из шаблона. Вот мой код:Как получить текстовое содержимое диапазона в шаблоне

Template.item.events({ 
'click .remove':function(event,tpl){ 
     Meteor.call('tasks.remove',this._id); 
     var docEmail=tpl.find('#DocName'); 
     alert(docEmail.text()); 
     Meteor.call('doc.removeAuthorization', docEmail, this._id); 

    },}); 

Мое определение шаблона:

<template name="item"> 
<li class="{{#if ischecked}}mychecked{{/if}}"> 
    <input type="checkbox" checked="{{ischecked}}" class="check-box"/> 
    <strong><span name="DocEmail" id="DocName">{{content}}></span></strong> 
    <span> {{CreatTime}}</span> 
    <button class="remove">&times;</button>  

</li></template> 

Вот как шаблон находится в теле:

<ul> 
{{#each tasks}} 
    <li>{{> item}}</li> 
{{/each}} 
</ul> 

Я прочитал много сообщений о том, как для использования jquery или jscript для получения текста диапазона. Кажется, я пробовал их всех. Все дали мне подобную ошибку:

body.js: 162 Uncaught TypeError: Не удается прочитать свойство 'текст' в нуль

Я также попытался использовать и tpl.find ("DOCNAME."). Получил такой же тип ошибки.

Также попробовал tpl. $(). Такая же ошибка.

Это потому, что элемент span не существовал при вызове функции template.find()?

Но я видел людей, использующих аналогичный код, чтобы получить элемент DOM (кроме текста диапазона) с успехом.

Я думал, что мои задачи.remove могут удалить текст перед вызовом jQuery. Поэтому я изменил порядок вызова двух Meteor.call s. Это так:

Template.item.events({ 
'click .remove':function(event,tpl){ 
     Meteor.call('tasks.remove',this._id); 
     var docEmail=tpl.find('#DocName'); 
     alert(docEmail.value); 
     Meteor.call('doc.removeAuthorization', docEmail, this._id); 

    },}); 

Теперь я получаю неопределенное предупреждение. Если я использую docEmail.val() или docEmail.text(), я получаю: "docEmail.val() не является функцией.".

Надеюсь, вы, ребята, можете пролить свет на него! Спасибо!

+0

ли у разместило внутри Jquery готового события? –

+1

@RIYAJKHAN Спасибо, что упомянули об этом. Нет. Я не помещал код внутри события jquery ready. Я новичок в jQuery. Даже не слышал о событии jQuery. Я пробовал, и это сработало! Спасибо! – MegaChunk

ответ

0

я думаю, что это полезно:

$("span").each(function(index) { 
    console.log(index + ": " + $(this).text()); 
}); 
+0

Это полезно! Теперь я знаю, что элемент span находится в форме массива. И хорошо знать, как использовать функцию .each(). Но я хочу получить текст из определенного диапазона, который отвечает на нажатие кнопки. Использование события .ready() кажется лучшим решением. – MegaChunk

0

Хорошо, попробуйте это,

var docEmail=tpl.find('#DocName').value; 

без "()"

+0

Я пробовал это, прежде чем я разместил вопрос. Также попробовали .val() и .text(). Никто не работал. Кажется, я получил ответ. Ответ заключается в использовании .ready(). Спасибо, что ответили! – MegaChunk

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