代码之家  ›  专栏  ›  技术社区  ›  Noodle Head

在Iframe上的“designMode”中将默认值设置为<p>,而不是<br>

  •  2
  • Noodle Head  · 技术社区  · 12 年前

    来自未来洞穴人的问候,

    我正在尝试构建一个简单的wysiwyg,但不幸的是,我无法默认使用段落而不是简单的换行符。然后我读到:

    Force browser to insert <p> tag when pressing Enter in a designMode IFrame

    这个问题是一年多前提出的。通过链接,我发现webkit中的一些问题已经“解决”: https://bugs.webkit.org/show_bug.cgi?id=59961 断然的: http://trac.webkit.org/changeset/109529

    对不起,我没有跟上进度,但这意味着什么:它已经解决了吗?有没有办法在不进入JS和监控击键的情况下做到这一点?

    如果没有,那么JS的解决方案是什么?监控“输入”,然后如何将所选内容包装在段落标记中??到目前为止,我试过这个,但不起作用

    $("#richTextField").keydown(function(e) {
    alert("you pressed something");
    if (e.keyCode == 13) {
    alert("you pressed ENTER"); 
    richTextField.document.execCommand('formatblock',false,"P");
    }
    });
    

    根本不起作用——甚至警报都没有发出。

    只是为了澄清。。。我想要:

    This is my first paragraph
    <br>
    This is my second paragraph
    <br> 
    

    这就是现在正在发生的事情,成为一种常态

    <p>This is my first paragraph</p>
    <p>This is my second paragraph</p>
    

    非常感谢。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Noodle Head    12 年前

    事实上,我已经用JS解决了这个问题。虽然下面的方法很简单,但它确实会导致复杂的情况,例如将段落标记插入列表项和大量换行符等。我想你可以稍后在php中去掉这些。以下是任何需要它的人的代码:

    $("#richTextField").contents().keydown(function(e) {
    if (e.keyCode === 13) {
    richTextField.document.execCommand('formatblock',false,"P");
    }
    });
    

    或者你可以这样做,在我看来效果更好,因为使用上面的代码,如果写了一些东西但没有点击回车键,你就根本没有段落标记。

    $("#richTextField").contents().keydown(function(e) {
    richTextField.document.execCommand('formatblock',false,"P");
    });
    

    我能找到的唯一方法。如果有人知道另一个,而没有进入javascript并监控“回车”键,请发布。