0

对 jQuery 来说相当新,所以请多多包涵。

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

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

我可以获得文本,它确实被传递给了 populateMessage 函数,但该函数永远不会完全执行并且文本框没有被填充。如果我将 populateMessage 函数包装在 document.ready 中并让它编写类似 .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);
}
4

3 回答 3

0

没有必要像那样扩展功能。如果你阅读手册,它会说

获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。

所以.find ()总是不返回单个元素。

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

或者,如果得到id真的那么必要,那么

var id = $('#inviteMessageBox').find('textarea')[0].attr('id');
$("#"+id").text(selectedMessage);
于 2012-04-26T23:32:04.847 回答
0

jQuery 不要求您通过 'id' 引用所有内容,因此您可以将populateMessage函数更改为如下所示:

function populateMessage(selectedMessage) {
    $('#inviteMessageBox')
        .find('textarea')
        .text(selectedMessage);
}
于 2012-04-26T23:32:41.510 回答
0

这仅在之后调用时才有效的原因$(document).ready()是,当您尝试将 click 事件绑定到具有该类的所有元素时,.card它们实际上并不存在于页面上,因此绑定失败。

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

解决这个问题的最好方法是立即定义你的函数,并在你知道文档准备好后将它们绑定到元素,如下所示:

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

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

这种方法应该让你的代码更干净。首先引用所有函数,最后绑定事件。

于 2012-04-26T23:35:06.050 回答