其他功能调用时函数失败

时间:2012-04-26 23:25:19

标签: jquery

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);
}

3 个答案:

答案 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);
});

此方法应使代码更清晰。首先引用所有函数并最后绑定事件。