我使用@Ajax.ActionLink刷新某个div,用来载入其他页面,当我载入某个含有kindeditor编辑器的页面的时候,kindeditor无法显示。
调用kindeditor的代码
@Ajax.ActionLink( “text”, “action”, “controller”, new AjaxOptions{ UpdateTargetId = “div”, })
kindeditor页面的代码
<script src="@Url.Content("~/Scripts/kindeditor/kindeditor.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/kindeditor/lang/zh_CN.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.js")" type="text/javascript"></script> <link href="@Url.Content("~/Content/Kindeditor/default/default.css")" rel="stylesheet" type="text/css" /> <script type="text/javascript"> var editor; KindEditor.ready(function (K) { editor = K.create('#kindeditor', { }) }); </script> <div id="ke-div"> <form> <textarea id="kindeditor" name="text" cols="100" ></textarea> <input type="submit" /> </form> </div>
请问怎么解决?
demo:下载地址,点击我
看看载入后,遇到有脚本错误吗?
没有,脚本完全能执行。
@Ten_cnblogs: 查看F12生成的代码是怎样的?
@幻天芒: 本来有添加多几个div的,现在没有。
@Ten_cnblogs: 用Chrome F12断点下脚本吧,呵呵~
@幻天芒: 有断点了,一直执行到尾,没问题。。。
@Ten_cnblogs: 检查下你引用的库,是不是用了多次,还有将Kindeidtor的页面脚本放在末尾。或者,你可以上传个demo,方便分析。
@幻天芒: 我上传了个demo了,http://pan.baidu.com/s/1GfWTP
@Ten_cnblogs: 恩,待会看下~
@Ten_cnblogs:
把Eidtor修改为如下即可,经测试,是KindEditor.rendy未执行。 <div id="ke-div"> <form> <textarea id="kindeditor" name="text" cols="100" ></textarea> <input type="submit" /> </form> </div> <script type="text/javascript"> var editor; editor = KindEditor.create('#kindeditor', { }); </script>
@幻天芒: 可以了,谢谢啊。我还想问下你知道div跟iframe有什么区别吗?我把那个切换的div改成iframe后也能执行,和为什么KindEditor.ready()不能执行?
@Ten_cnblogs: div和iframe都算是容器吧,不过div算是当前页,iframe则是跨页面了。更具体我也说不清楚了。KindEditor.ready()看看http://kindeditor.net/docs/event.html#k-ready-fn
@幻天芒: KindEditor.ready(),看了还是不懂,能解释下吗?
@Ten_cnblogs: 我也不是很明白,(^.^),我的理解是ajax请求过来的数据,没有加入dom树,导致ready无法执行。
是不是加载时机不对啊!在页面加载完成之后,通过谁触发(比如button单击事件)
$(function(){ $("#btnCreate").click(function(){ KindEditor.create('textarea[name="content"]'); }); });
不是哦,如果不使用@Ajax.ActionLink的话可以正常打开的,我刚刚修改了问题,贴上完整代码了。
@Ten_cnblogs: 1.下面的div的id,和上面的UpdateTargetId不是同一个,
2.写单独的方法,在@ajax.ActionLink(),成功后调用
function afterLoadTextarea() { KindEditor.create('textarea[name="text"]'); }
@Ajax.ActionLink("danji", "Index", new AjaxOptions() { HttpMethod = "post", OnSuccess = "afterLoadTextarea", UpdateTargetId = "ke-div" })
@秋壶冰月: 这个div没问题的,在调用kindeditor页面的页面是还有一个div的。我在做的网站这个@ajax.ActionLink()是运行时生成的,单独的方法无法满足我的需求。。。还有别的方法吗?
@Ten_cnblogs: OnSuccess = "afterLoadTextarea",就是执行成功后,调用afterLoadTextarea方法,给textarea加上编辑功能,这样能保证加载的时机,afterLoadTextarea方法放到script中就行
@秋壶冰月: 我刚刚试了,可这样实在无法满足我的需求。。。刚刚调试了下发现KindEditor.ready()会执行,可是为什么没有效果?