首页 > Java, JavaScript, jQuery, 应用实例 > kindeditor编辑器在jQuery UI Dialog中提交数据的问题

kindeditor编辑器在jQuery UI Dialog中提交数据的问题

2009年10月24日 IT北瓜 发表评论 阅读评论

      kindeditor一款我很喜欢的国产轻量级富文本编辑器,但在结合jQuery UI Dialog组件使用时却发现一种奇怪的现象——利用表单中的按钮可以正确提交编辑器中输入的数据,但是通过Dialog组件的按钮事件却得不到编辑器中输入的数据,具体情况阐述如下:

      第一步:配置kindeditor和创建Dialog

      1.主页面中引入kindeditor.js并做初始化工作(PS:这里leeo使用的是jQuery的load()方法来载入放置编辑器的页面kindeditorTest.html的,因此不能直接利用KE.show()方法创建编辑器),代码如下:

<script type="text/javascript" charset="utf-8" src="kindeditor/kindeditor.js"></script>
<script type="text/javascript">
  KE.init({
      id : 'content',
      cssPath : 'kindeditor/customer.css'
  });
</script>

      2.制作kindeditorTest.html页面,(PS:这里kindeditorTest.html只是作为一个html片段载入到主页面中,所以省去了不必要的html标签)代码如下:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css" rel="stylesheet">
  form {
      margin: 5px;
  }
  .editor {
      margin-top: 5px;
      margin-bottom: 5px;
  }
</style>
<form id="kindeditorTest" name="kindeditorTest" method="post" action="">
  <div>
      <label>标题:</label><input name="title" value="" />
  </div>
  <div>
      <textarea name="test" style="width:650px;height:50px;"></textarea>
  </div>
  <div class="editor">
     <textarea id="content" name="content" style="width:650px;height:200px;"></textarea>
  </div>
  <input type="submit" id="submitBtn" name="button" value="提交内容" />
</form>

      3.javascript代码:

function kindeditorFun(){
	$('#dialogTest').dialog({
		title: 'kindeditor测试窗口',
		bgiframe: true,
		width: 680,
		heighe: 440,
		modal: true,
		autoOpen: false,
		overlay: {
			backgroundColor: '#000',
			opacity: 0.5
		},
		buttons: {
			'关 闭': function(){
				hideDialog();
			},
			'提 交': function(){
				$('#kindeditorTest').submit();
			}
		},
		open: function(){
			$('#dialog-content').html('<div id=\"loading-msg\"><img src=\"images/ajax-loader.gif\" />加载中...</div>')
								.load('kindeditorTest.html', function(){
									KE.create('content');
									ajaxForm('kindeditorTest');
								});
		}
    });
	$('#dialogTest').dialog('open');
}
function ajaxForm(_formid){
	var options = {
    		url: 'jsonFilm!kindeditorTest.action',
		    dataType: 'json'//,
		    //beforeSubmit: validateAddFilm,
		    //success: showResponseAddFilm
	    };
    $('#' + _formid).submit(function() {
	    $(this).ajaxSubmit(options);
	    return false;
	});
}

      4.java代码:

private transient String title;
private transient String test;
private transient String content;

public String kindeditorTest() throws Exception{
	System.out.println("标题: " + title);
	System.out.println("无编辑器textarea: " + test);
	System.out.println("有编辑器textarea: " + content);
	return SUCCESS;
}

public String getTitle() {
	return title;
}

public void setTitle(String title) {
	this.title = title;
}

public String getTest() {
	return test;
}

public void setTest(String test) {
	this.test = test;
}

public String getContent() {
	return content;
}

public void setContent(String content) {
	this.content = content;
}

      5.Dialog窗口如下图:

      第二步:开始测试

      1.点击“提交”按钮,控制台输出结果如下:

      2.点击“提交内容”按钮,控制台输出结果如下:

    3.比较以上两个结果,发现利用表单中的按钮可以正确提交编辑器中输入的数据,但是通过Dialog组件的按钮事件却得不到编辑器中输入的数据。从以上所有实现代码来看这两个按钮的功能是一样的,但怎么会出现不同的结果呢?很让leeo我无法理解。于是便又到kindeditor网站看相关文档和实例,这回实例5——手动添加Onsubmit事件,引起了我的注意,难道是手动加载和自动加载导致出现以上不同的结果?

      第三步:开始测试“手动添加Onsubmit事件”

      1.修改相应代码:

      1)第一步1.中的KE.init()设置autoOnsubmitMode : false

      2)第一步3.中的$(’#’ + _formid).submit添加编辑器赋值方法KE.util.setData(’content’)

      2.再次测试结果,发现这回第二步中的2种方式都能正确获得相关数据。问题总算得以解决,这个问题真的困扰了我许久,花了不少时间去调式。在这里记录下来希望对遇到同样问题的coder们有所帮助。。。

  1. Azan
    2010年8月3日00:23 | #1

    可否請問博主
    如果只需用dialog的提交按鈕
    提交當時頁面的表單
    以Ajax的方式更新局部頁面
    該如何編寫語法呢?
    小弟想試著更改不用load其他頁面的方式
    但卻一直都試不成功
    斗膽請教博主
    謝謝

  2. 2010年4月1日09:16 | #2

    @hwangzhiming
    我当时用的时候好像没遇到这样的问题,如果不能获得光标,你可以尝试通过js在dialog初始化完编辑器之后让编辑器获得光标,用focus。。。

  3. 2010年4月1日01:08 | #3

    你好,有个困扰我的问题想请交一下博主,我使用您一样的办法,但是加载完之后,dialog里面的编辑器在火狐下面不能使用,单击输入框不能输入,要先点一次全屏才可以看到输入光标,请问这是怎么回事。

  4. 2009年11月10日21:35 | #4

    @longmao
    我是用Windows live writer写日志的,高亮用的是Syntax Highliter Plugin插件中文版。。。

  5. longmao
    2009年11月10日20:24 | #5

    请问你页面上给代码高亮的插件是什么呀?

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。