0

これが私のJavaScriptです:

$(document).ready(function(){
    $(".reply").click(function(){
        var replyId = $(this).attr("id");
        $("textarea[name='comment']").val("<reply:"+replyId+">");
        $("textarea[name='comment']").ready(function(){
            moveCursorToEnd($(this));
        });
    });
});

function moveCursorToEnd(el) {
    if (typeof el.selectionStart == "number") {
        el.selectionStart = el.selectionEnd = el.value.length;
    } else if (typeof el.createTextRange != "undefined") {
        el.focus();
        var range = el.createTextRange();
        range.collapse(false);
        range.select();
    }
}

私はjavascriptを使用した関数には少し慣れていませんが、これは機能していないようです。値は入力されますが、テキストエリアにはフォーカスされません。私は非常にばかげたことをしていると確信しています。何かアイデアはありますか?

4

2 に答える 2

1

DOM要素を期待している関数にjqueryオブジェクトを渡しています。あなたも取り除きたいready

$(".reply").click(function(){
    var replyId = $(this).attr("id");
    var $textArea = $("textarea[name='comment']");

    $textArea.val("<reply:"+replyId+">");

    moveCursorToEnd($textArea[0]);
});

http://jsfiddle.net/wC5Qm/1/

于 2013-01-04T21:29:11.167 に答える
1

イベントがアタッチされると、テキストエリアはすでにロードされているため、テキストエリアの準備完了イベントは発生しません。また、jQuery オブジェクトではなく生の要素を関数に渡す必要もあります。これらの行を変更してみてください

$("textarea[name='comment']").ready(function(){
    moveCursorToEnd($(this));
});

これに

moveCursorToEnd($("textarea[name='comment']")[0]);
于 2013-01-04T21:31:49.727 に答える