【问题标题】:newlines are ignored in javascript for asp.net multiline textbox在 javascript 中为 asp.net 多行文本框忽略换行符
【发布时间】:2014-11-14 16:09:42
【问题描述】:

我在 asp.net 表单上有一个多行文本框,我在过去的事件中调用以下 javascript 函数。

如果我粘贴任何数据,新行将被忽略。

不知道是不是跟javascript函数有关。我可以在内部文本中看到“/n”,但不知何故它没有正确呈现。 “hello\nworld”正在被渲染为“hello world”

function handlepaste(textbox, e, label, len) {
    var savedcontent = textbox.innerHTML;
    if (e && e.clipboardData && e.clipboardData.getData) {// Webkit - get data from clipboard, put into editdiv, cleanup, then cancel event
        if (/text\/html/.test(e.clipboardData.types)) {
            textbox.innerHTML = e.clipboardData.getData('text/html');
        }
        else if (/text\/plain/.test(e.clipboardData.types)) {
            textbox.innerHTML = e.clipboardData.getData('text/plain');
        }
        else {
            textbox.innerHTML = "";
        }
        waitforpastedata(textbox, savedcontent);
        if (e.preventDefault) {
            e.stopPropagation();
            e.preventDefault();
        }
        return false;
    }
    else {// Everything else - empty editdiv and allow browser to paste content into it, then cleanup
        textbox.innerHTML = "";
        waitforpastedata(textbox, savedcontent, label, len);
        return true;
    }
}

function waitforpastedata(elem, savedcontent, label, len) {
    if (elem.childNodes && elem.childNodes.length > 0) {
        processpaste(elem, savedcontent, label, len);
    }
    else {
        that = {
            e: elem,
            s: savedcontent
        }
        that.callself = function () {
            waitforpastedata(that.e, that.s, label, len)
        }
        setTimeout(that.callself, 20);
    }
}

function processpaste(textbox, savedcontent, label, len) {
    pasteddata = textbox.innerHTML;

    if (savedcontent.length > 0) {
        textbox.innerHTML = savedcontent + pasteddata ;
    }

    if (pasteddata.length > len) {
        textbox.value = textbox.value.substring(0, len);
        document.getElementById(label).className = "red-text";
        document.getElementById(label).innerHTML = 'You are trying to type too much information ';
    }
    else {
        document.getElementById(label).className = "grey-text";
        document.getElementById(label).innerHTML = textbox.value.length.toString() + ' of ' + len + ' chars';
    }
}

【问题讨论】:

  • 我试过 textbox.innerHTML = savedcontent.replace(/\n/g, '
    ') + pasteddata.replace(/\n/g, '
    ') ;但是两个新行 '

    ' 呈现在新行 '
    '

标签: javascript c# asp.net vb.net


【解决方案1】:

可能是因为 HTML 不会按照您期望的方式呈现新行。请改用<br>

【讨论】:

  • 我试过 textbox.innerHTML = savedcontent.replace(/\n/g, '
    ') + pasteddata.replace(/\n/g, '
    ') ;但是两个新行 '

    ' 呈现在新行 '
    '
  • 当您将“Hello\nworld”更改为“Hello
    world”时,它会按照您的预期呈现吗?我不相信你的替换语句。
  • 是的,它确实将其替换为“Hello
    world”,但“Hello

    world”被呈现为“Hello
    world”
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 2011-08-20
  • 1970-01-01
  • 2010-09-07
  • 2021-06-17
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多