3

私はテキストエリアで作業しています。ユーザーがEnterキーを押すとフォームが送信されますが、Ctrlキーを押しながらEnterキーを押すと次の行に移動します。

これは、jqueryによってkeypressで呼び出される関数内で使用しているコードです。

if ( (e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
    //move to next line here

これを行う方法はありますか?

4

2 に答える 2

2
$('.parentElementClass').on('keyup', 'textarea', function(e) {
    if(e.ctrlKey && (e.which == 13 || e.keyCode == 13)) {
        $(this).val(function(i, val) {
            return val + '\n';
        });
    }
});

デモ

于 2012-08-02T14:15:34.863 に答える
1

これですべて設定されました。任意の時点でブレークラインを維持し、位置を維持します(IEなどのフォールバックを使用して最新のブラウザー技術を使用しようとしている間)。

更新されたx2-jsFiddleリンク

$('#sillyTextarea').keydown(function (e) {

    if (e.keyCode === 10 || e.keyCode  == 13 && e.ctrlKey) {
        // Ctrl-Enter pressed
        // keyCode 10 is actually for Chrome (whacky I know...)

        var el = document.getElementById('sillyTextarea'),
            allText = $(this).val(),
            currentPos = getCaret(el),
            beforeText = allText.substr(0, currentPos),
            afterText = allText.substr(currentPos);

        $(this).val(beforeText + '\n' + afterText);

        setCaretPosition(el, currentPos);
    }
});

2つの機能の助けを借りて

function getCaret(el) { }

テキストエリア内のケアレットの位置(最初から文字数)

function setCaretPosition(el, caretPos) { }

HTMLテキストボックスでキーボードのケアレットの位置を設定します

于 2012-08-02T14:17:22.720 に答える