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

これが後で呼び出されたときにのみ機能する理由$(document).ready()は、クリックイベントをクラスを持つすべての要素にバインドしようとすると、.cardそれらはまだページに実際には存在しないため、バインドが失敗するためです。

DOMが完全に記述された後$(document).ready();、すべての要素がページ上にあり、それらにバインドされるイベントを受け入れる準備ができていると確信できる場合。

これを回避する最善の方法は、関数をすぐに定義し、ドキュメントの準備ができたら次のように要素にバインドすることです。

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

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

このメソッドは、コードをよりクリーンに保つ必要があります。最初にすべての関数を参照し、最後にイベントをバインドします。

于 2012-04-26T23:35:06.050 に答える
0

jQueryでは「id」ですべてを参照する必要がないため、populateMessage関数を次のように変更できます。

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

そのような関数を拡張する必要はありません。そして、マニュアルを読むと、

セレクター、jQuery オブジェクト、または要素によってフィルター処理された、一致する要素の現在のセット内の各要素の子孫を取得します。

SO .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 に答える