2014-01-08 71 views
1

我需要检查用户输入的文本宽度,如果超出最大值,则不允许进一步输入。我知道如何使用当前字体和字体大小来测量div中文本的宽度。我用下面的函数测试文本的宽度:CKEditor中文本的最大宽度

editor.on("change", function (ev) { 
      var imprintText = editor.getData(); 
      var textWidth = measureText(imprintText); 

      var hfMaxImprintWidth = document.getElementById("<%=hfMaxImprintWidth.ClientID%>"); 
      var maxWidth = hfMaxImprintWidth.value; 

      if (textWidth >= maxWidth) { 
      }; 
     }); 

但我不知道如何保持额外的字符被添加到textarea。我还想将文本限制为一行(不换行或新段落)。有人可以帮助我吗?谢谢!

+0

你是指渲染宽度或字符数量?意思,'measureText()'做什么?它应该返回类似'300px'还是'54'?你怎么测量它在一个div里面?如果这样的话,为什么不将'imprintText'插入临时div,测量并使用该计算? – Nenotlep

+0

这就是'measureText'所做的:它将文本放在一个临时div中,并以像素为单位返回其宽度。如果已经达到或超过这个最大宽度,我想知道如何拦截CKEditor,将下一个字符添加到文本框中。我想停止在编辑器窗口中允许更多输入。 –

回答

0

需要很长时间才能成为评论 - 多合适。

听起来像我会通过使用解决方法解决的问题。例如,如果文本太长,请将CKEditor背景色设置为红色并防止保存。就像一些网站做评论 - 例如,stackoverflow显示“太长了27个字符”。在保存时做类似的消息:显示一条警告,告知用户他们的内容太多,但只留下字符数。至于“没有换行符或新段落” - 这可能会更复杂一点。高级内容过滤器可以轻松处理换行符,但对于一个段落而言,我认为您可以执行的操作是在保存期间再次检查并提醒用户。

至于自动欺骗,如何捕获key事件和检查if (evt.data.keyCode === 13) {}和删除可编辑的新元素。

更好的是,如果enter键事件是可取消的,你可以试试evt.cancel()以及完全忽略它。对不起没有示例代码。

+0

谢谢!这很有帮助。 –