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 :(得分:0)
没有必要像这样扩展功能。如果您阅读manual,则说明
获取当前匹配元素集中每个元素的后代,由选择器,jQuery对象或元素过滤。
SO .find()始终不会返回单个元素。
$('#inviteMessageBox').find('textarea')[0].text(selectedMessage);
或者,如果真的需要id
,那么
var id = $('#inviteMessageBox').find('textarea')[0].attr('id');
$("#"+id").text(selectedMessage);
答案 1 :(得分:0)
jQuery不要求您通过“id”引用所有内容,因此您可以将populateMessage
函数更改为以下内容:
function populateMessage(selectedMessage) {
$('#inviteMessageBox')
.find('textarea')
.text(selectedMessage);
}
答案 2 :(得分:0)
仅在$(document).ready()
之后调用时才起作用的原因是因为当您尝试将click事件绑定到具有类.card
的所有元素时,它们实际上并不存在于页面上,所以绑定失败。
在$(document).ready();
完全写完DOM之后,您可以确信页面上的所有元素都已准备好接受绑定到它们的事件。
解决此问题的最佳方法是立即定义您的函数,并在知道文档准备就绪后将它们绑定到元素,如下所示:
function sayHello() {
alert('hello');
}
$(document).ready(function() {
$('.button1').click(sayHello);
$('.button2').click(sayHello);
$('.button3').click(sayHello);
});
此方法应使代码更清晰。首先引用所有函数并最后绑定事件。