1. 程式人生 > >kindeditor非同步載入時無法顯示編輯框

kindeditor非同步載入時無法顯示編輯框

事情是這樣的,我在A頁面的div通過 jQuery.load() 方法載入一個頁面B時,B頁面帶有編輯框  textarea,現在想讓這個 textarea 顯示為一個 kindeditor的富文字編輯區域,但是怎麼都不能成功,官網上的example根本就跑不起來。(也許是網路原因,或者其他)(官網example:http://kindeditor.net/ke4/examples/dynamic-load.html

哎,心塞。

但是專案裡已經有好幾個地方都用這個編輯器,就不想換了(這些地方能跑成功的原因是頁面直接呼叫kindeditor,而不是通過非同步載入的方式)。

索性偶然瞥見其他編輯器也有出現這個問題,參考了別人的情況,終於成功實現了。

解決方法:不要在子頁面B呼叫 KindEditor.create() ,而是在主頁面A匯入Editor的js包,在主頁面的$.load() 的回撥函式中建立編輯器。如果要使用編輯器的內容,則咋主頁面設定全域性變數 var editor; 將 KindEditor.create() 賦給 editor 就可以了,子頁面B可以通過 editor.html() 來操作編輯器的內容。

程式碼:

主頁面A.jsp

<script type="text/javascript" charset="utf-8" src="js/kindeditor-4.1.7/kindeditor-min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/kindeditor-4.1.7/lang/zh_CN.js"></script>

<div id="mainData" class="mainData">

     <div id="dataContent"></div>

</div>

<script type="text/javascript">

    var editor;  //全域性變數

    $("#dataContent").load("B.jsp",function(){
            
            editor = KindEditor.create('textarea[name="modelContent"]', {        //這裡的name是子頁面對應的 textarea 的name屬性值
                width:'725px',
                minHeight:360,
                themeType : 'simple',
                resizeType : 1,
                allowPreviewEmoticons : false,
                allowImageUpload : false,
                items : [
                    'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline',
                    'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
                    'insertunorderedlist', '|', 'emoticons', 'image', 'link']
            });
            
        });

</script>

子頁面B.jsp

<div id="tempcontent">
    <textarea name="modelContent" id="tContent" ></textarea>
</div>

<script type="text/javascript">

    editor.html();   //取值

    editor.html("Hello!");    //賦值

</script>

附:幫助文件裡的方法,總之我沒用成功,不知道別的情況能不能成功

dynamic-load.html

<!doctype html><html><head><meta charset="utf-8" /><title>Dynamic Load Examples</title><style>
			form {
				margin: 0;
			}
			textarea {
				display: block;
			}
		</style><script charset="utf-8" src="../lib/jquery.js"></script><script>
			$(function() {
				$('input[name=load]').click(function() {
					$.getScript('../kindeditor-min.js', function() {
						KindEditor.basePath = '../';
						KindEditor.create('textarea[name="content"]');
					});
				});
				$('input[name=remove]').click(function() {
					KindEditor.remove('textarea[name="content"]');
				});
			});
		</script></head><body><!--
		google_ad_client = "ca-pub-7116729301372758";
		/* 更多演示(728x90) */
		google_ad_slot = "5052271949";
		google_ad_width = 728;
		google_ad_height = 90;
		//-->
		</script></script><h3>非同步載入</h3><form></textarea><p><input type="button" name="load" value="載入JS並建立編輯器" /><input type="button" name="remove" value="刪除編輯器" /></p></form></body></html>