分享

CKEditor无法验证的解决方案[js验证+jQuery Validate验证]

 桑枯海 2013-07-27
CKEditor 编辑器是增强过的 textarea 元素,在填写了内容之后,编辑器并不立即把内容更新到原来的 textarea 元素中的,而是等到 submit 事件之前把编辑器的内容更新到 textarea 中.
因此,普通的js验证或是jquery validate验证都获取不到编辑器的值.) 

1.js验证

获取CKEditor 编辑器的值其实很容易,其值就是CKEDITOR.instances.mckeditor.getData(),实例代码如下:

  1. <script language="javascript" type="text/javascript">      
  2.   
  3.     function checkForm()  
  4.               {  
  5.                   var f=document.form1;  
  6.                   var topicHeading=f.tbTopicHeading.value;  
  7.                   topicHeading = topicHeading.replace(/^\s+/g,"");  
  8.                   topicHeading = topicHeading.replace(/\s+$/g,"");  
  9.                                   if (topicHeading =="")  
  10.                                    {  
  11.                                         alert("请输入发表话题的标题.");  
  12.                                         f.tbTopicHeading.focus();  
  13.                                         return false;  
  14.                                    }  
  15.                                    if(topicHeading.length>50);  
  16.                                    {  
  17.                                       alert("话题的主题长度必须在50字符以内.");  
  18.                                       f.tbTopicHeading.focus();  
  19.                                       return false;  
  20.                                    }  
  21.                   var topicContent=CKEDITOR.instances.mckeditor.getData();  
  22.                     
  23.                   topicContent = topicContent.replace(/^\s+/g,"");  
  24.                   topicContent = topicContent.replace(/\s+$/g,"");  
  25.                                   if (topicContent =="")  
  26.                                    {  
  27.                                         alert("请填写话题内容.");  
  28.                                         f.mckeditor.focus();  
  29.                                         return false;  
  30.                                    }   
  31.   
  32.                                    if(topicContent.length>4000)  
  33.                                    {  
  34.                                       alert("话题内容的长度必须在4000字符以内.");  
  35.                                       f.mckeditor.focus();  
  36.                                       return false;  
  37.                                    }             
  38.   
  39.               }    
  40.               </script>  

其中,mckeditor为编辑器的textarea的id和name.
ASP.NET中也是一样:

  1. <asp:TextBox ID="mckeditor" runat="server" TextMode="MultiLine" Width="94%" Height="400px" CssClass="ckeditor"></asp:TextBox>  

2.jQuery Validate验证
jquery的验证模式不能直接使用CKEDITOR.instances.mckeditor.getData()这个值.
它是使用如下形式来提交验证:

  1. function InitRules() {  
  2.             opts = {  
  3.                  rules:  
  4.                  {  
  5.                         tbTopicHeading:{  
  6.                         required:true,  
  7.                         maxlength:50     
  8.                     },                     
  9.                     mckeditor:{  
  10.                         required:true,  
  11.                         maxlength:4000  
  12.                     }   
  13.                  },  
  14.                  messages:  
  15.                  {  
  16.                     tbTopicHeading:{  
  17.                     required:"请输入发表话题的标题.",  
  18.                     maxlength:jQuery.format("话题的主题长度必须在50字符以内.")   
  19.                 },  
  20.                     mckeditor:{  
  21.                     required:"请填写话题内容.",  
  22.                     maxlength:jQuery.format("话题内容的长度必须在4000字符以内.")   
  23.                 }  
  24.                  }   
  25.             }  
  26.         }  

其中mckeditor为控件id,不仅有取值的作用,还有提示信息定位的作用.
因此,可以在页面加载时,加入实例化编辑器代码,实现编辑器更新了内容之后,立即把内容更新到 textarea 元素。


代码如下:

  1. <script type="text/javascript">  
  2. //<![CDATA[  
  3. CKEDITOR.instances["mckeditor"].on("instanceReady"function()       
  4.         {       
  5.                         //set keyup event   
  6.                         this.document.on("keyup", updateTextArea);   
  7.                          //and paste event  
  8.                         this.document.on("paste", updateTextArea);      
  9.         });       
  10.   
  11.         function updateTextArea()    
  12.         {       
  13.                 CKEDITOR.tools.setTimeout( function()  
  14.                             {        
  15.                                 $("#mckeditor").val(CKEDITOR.instances.mckeditor.getData());       
  16.                                 $("#mckeditor").trigger('keyup');       
  17.                             }, 0);   
  18.         }     
  19. //]]>  
  20.                             </script>  

此段代码放在编辑器控件之下即可.完整实例如下:

  1. <asp:TextBox ID="mckeditor" runat="server" TextMode="MultiLine" Width="98%" Height="400px" CssClass="ckeditor"></asp:TextBox>  
  2. <script type="text/javascript">  
  3. //<![CDATA[  
  4. CKEDITOR.replace( '<%=mckeditor.ClientID %>',// mckeditor.ClientID为TextBox mckeditor生成的对应客户端看到的id  
  5. {  
  6. skin : 'kama',//设置皮肤  
  7. enterMode : Number(2),//设置enter键的输入1.<p>2为<br/>3为<div>  
  8. shiftEnterMode : Number(1), // 设置shiftenter的输入  
  9. disableNativeSpellChecker:false,   
  10. scayt_autoStartup:false,  
  11. toolbar_Full : [  
  12. ['Source','-','Save','NewPage','Preview','-'],  
  13. ['Cut','Copy','Paste','PasteText','PasteFromWord','-'],  
  14. ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],  
  15. ['NumberedList','BulletedList','-','Outdent','Indent'],  
  16. ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],  
  17. ['Link','Unlink','Anchor'],  
  18. ['Image','Table','HorizontalRule'],['Subscript','Superscript'],  
  19. '/',  
  20. ['Bold','Italic','Underline'],  
  21. ['TextColor','BGColor'],  
  22. ['Styles','Format','Font','FontSize']  
  23. ],  
  24. //filebrowserBrowseUrl: '<%=ResolveUrl("~/ckfinder/ckfinder.html")%>', //启用浏览功能,正式使用场合可以关闭,只允许用户上传  
  25. //filebrowserImageBrowseUrl:'<%=ResolveUrl("~/ckfinder/ckfinder.html?Type=Images")%>',  
  26. //filebrowserImageUploadUrl:'<%=ResolveUrl("~/ckfinder/core/connector/aspx/connector.aspx?command=QuickUpload&type=Images")%>'  如果使用ckfinder 就不要屏蔽  
  27. //自定义的上传  
  28. filebrowserImageUploadUrl:'<%=ResolveUrl("~/fileupload/fileupload.aspx?command=QuickUpload&type=Images")%>'  
  29. });  
  30. CKEDITOR.instances["mckeditor"].on("instanceReady"function()   
  31.         {  
  32.                         //set keyup event  
  33.                         this.document.on("keyup", updateTextArea);    
  34.                          //and paste event  
  35.                         this.document.on("paste", updateTextArea);   
  36.         });   
  37.   
  38.         function updateTextArea()  
  39.         {  
  40.                 CKEDITOR.tools.setTimeout( function()   
  41.                             {  
  42.                                 $("#mckeditor").val(CKEDITOR.instances.mckeditor.getData());    
  43.                                 $("#mckeditor").trigger('keyup');   
  44.                             }, 0);   
  45.         }     
  46. //]]>  
  47.                             </script>  

引用自:http://www./forum.php?mod=viewthread&tid=16330&from=portal

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多