按Enter键时在textarea中插入换行符,但不提交表单

时间:2014-11-13 23:42:09

标签: jquery

我有一个包含多个文本字段和textareas的表单。 当我按下输入时,表格被发送。 我用以下方法解决了这个问题:

$('form').keypress(function (e) {
    if (e.keyCode == 13) {
        return false;
    } 
});

但是然后在textarea中按Enter键不会插入换行符。它什么都不做。

然后我尝试了:

$('body').keypress(function (e) {
    if (e.keyCode == 13 && e.target.nodeName != 'TEXTAREA') {
        return false;
    }
});

然后按Enter键发送表单。我不知道如何解决它。我试过这个:

$('textarea').keypress(function (evt) {
    if (evt.keyCode == 13) {
        var textarea = document.getElementById("ad_text");
        textarea.value += "\n";
        // I'm guessing you may want this
        return false;
    }
});

好主意,但换行总是插在最后,而不是在当前的编辑位置。

我尝试的另一件事是:

$.fn.getCursorPosition = function () {
    var elem = $(this).get(0);
    var pos = 0;
    if ('selectionStart' in elem) {
        pos = elem.selectionStart;
    } else if ('selection' in document) {
        elem.focus();
        var sel = document.selection.createRange();
        var selLength = document.selection.createRange().text.length;
        sel.moveStart('character', -elem.value.length);
        pos = sel.text.length - selLength;
    }
    return pos;
} 
$.fn.setCursorPosition = function (pos) {
    this.each(function (index, elem) {
        if (elem.setSelectionRange) {
            elem.setSelectionRange(pos, pos);
        } else if (elem.createTextRange) {
            var range = elem.createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }
    });
    return this;
}
$(document).ready(function() {

    $('textarea').keypress(function (e) {
        if (e.which == 13) {
            var pos = $("#ad_text").getCursorPosition();
            var valorInput = $("#ad_text").val();
            var miValor1=valorInput.substring(pos, pos + 1);
            //aqui poner algun if si pos se encuentra al final de la cadena se pone   var miValor2= valorInput.replace(miValor1,  miValor1  + "\r" )

            var miValor2= valorInput.replace(miValor1, "\r" + miValor1  )

            $("#ad_text").val(miValor2);
            $("#ad_text").setCursorPosition(pos + 1);

            return false;
        }
    });
    $('form').keypress(function (e) {
        if (e == 13) {
            return false;
        }
    });

    $('input').keypress(function (e) {
        if (e.which == 13) {
            return false;
        }
    });

});

这很好用,但最终产生文本换行符,它在文本的开头做, 我决定放一些" if"但我什么都想不到。

使用joomla模板: yoo_nite

我已经审核了所有js文件,当我删除文件时,我发现了 uikit.js textarea效果很好,但其他东西不起作用。

另外,当我更改模板时,它可以正常工作。

但这是我开发的模板,我不想改变它。

该网站是 http://alanuncio.com/alanuncioitechno/index.php?option=com_adsmanager&view=edit&Itemid=106

2 个答案:

答案 0 :(得分:0)

默认情况下,如果您在textarea中按Enter,则提交表单。这意味着必须有其他一些脚本来做它。

在您网页的另一部分,您有以下脚本:

jeams(document).keypress(function(e) {
    var keycode = (e.keyCode ? e.keyCode : e.which);
    if(keycode == 13) {
        if(jeams("input#buscador").val() == 'Buscar...') jeams("input#buscador").val('');
        jeams('#form_ajaxSearch')[0].submit();
    }
});

按下回车键时会提交搜索框,但会检测页面上任意位置的输入键,包括文本区域。

我相信如果您将jeams(document)更改为jeams("input#buscador"),则应该解决此问题。

答案 1 :(得分:0)

非常感谢你的帮助。 你已经解决了我的问题。 我找不到一个月,所以你帮助了我很多。 不是因为我不能给你一个声誉投票。 我想因为我是stackoverflow社区的新手。 但是当我去给你的时候。 解决