2012-04-26 63 views
0

对jQuery来说相当新颖,所以请耐心等待。由其他函数调用时,函数失败

我无法将一个函数的结果传递给另一个函数执行它。

然后重点是将文本作为var传递给函数populateMessage(),并将文本写入文本框。

我可以获取文本,并将其传递给populateMessage函数,但该函数从未完全执行且文本框未填充。如果我在document.ready中包装populateMessage函数,并让它写入类似.text('test');它会工作。

我该如何做这项工作?

感谢您的帮助

$(document).ready(function() { 
    getClickedInvite(); 
}); 

//gets clicked item template and sends it to message box 

function getClickedInvite() { 
    $('.card').click(function() { 
     var selectedMessage = $(this).text(); 
     alert(selectedMessage); 
     populateMessage(selectedMessage); 
    }); 
} 

function populateMessage(selectedMessage) { 
    alert(selectedMessage + ' has been sent to the message box ') 
    var inviteMessageBoxId = $('#inviteMessageBox').find('textarea').attr('id'); 
    alert(inviteMessageBoxId); 
    $('#' + inviteMessageBoxId).text(selectedMessage); 
} 
+0

当您点击'.card'类的成员时,您是否会收到警告? – 2012-04-26 23:30:11

+0

我根据似乎已从答案列表中删除的答案清理了代码。我将getClickedInvite移入了文档,看起来很顺利。我认为最大的问题是我的环境,textare是一个HTML编辑器。当编辑器处于纯文本区时,它可以工作,但当它处于富编辑器模式时,它不会。 – 2012-04-26 23:50:26

回答

0

无需扩展功能类似。如果你读了manual,它说

获取每个元素的后代在当前匹配的元素,通过选择,jQuery对象,或元素过滤。

SO .find()始终不返回单个元素。

$('#inviteMessageBox').find('textarea')[0].text(selectedMessage); 

或者,如果让id是真的有必要那么

var id = $('#inviteMessageBox').find('textarea')[0].attr('id'); 
$("#"+id").text(selectedMessage); 
+0

谢谢,很好的一个知道。 – 2012-04-26 23:45:24

+0

@MarkHollas,有用吗? – Starx 2012-04-26 23:46:43

+0

正如我在一个不同的评论中提到的我在DotNetNuke和textarea是一个HTML编辑器控件,所以当它呈现元素ID前置DNN控制'垃圾',所以我必须先获得textarea的动态ID。我试图用你有的替换,但它没有工作..with我有限的知识 – 2012-04-26 23:56:59

0

jQuery的不要求你通过“ID”引用的一切,这样你就可以改变你的populateMessage功能是这样的:

function populateMessage(selectedMessage) { 
    $('#inviteMessageBox') 
     .find('textarea') 
     .text(selectedMessage); 
} 
+0

谢谢。我的情况是,我使用dotnetnuke和文本框(HTML编辑器)是一个控件。在渲染id前面加上一堆DNN相关的“垃圾”,所以我必须先获得动态创建的ID ... – 2012-04-26 23:43:55

0

$(document).ready()后叫其原因这只能是因为当你试图将click事件绑定到所有元素s与类.card它们实际上不存在于页面上,所以绑定失败。

$(document).ready();之后,DOM已经完全写入,您可以确信页面上的所有元素都已准备好接受要绑定的事件。

来解决这个问题的最好方法是定义你的函数立竿见影并将其绑定到的元素,一旦你知道该文件已经准备好,就像这样:

function sayHello() { 
    alert('hello'); 
} 

$(document).ready(function() { 
    $('.button1').click(sayHello); 
    $('.button2').click(sayHello); 
    $('.button3').click(sayHello); 
}); 

这个方法应该保持代码干净多了。首先引用所有函数,并最后绑定事件。

+0

欢呼,这是很好的学习。 – 2012-04-26 23:47:21

+0

@MarkHollas谢谢。确保你标出最佳答案和+1有用答案。 – wilsonpage 2012-04-27 08:59:13