有没有办法阻止TinyMCE自动关注页面加载?
问题描述:
我的窗体上有很多输入字段,其中一个使用TinyMCE(版本3.5.2)。一旦TinyMCE加载它将焦点设置到它自己。我怎样才能防止这种情况发生?我想保留默认选择的第一个输入。有没有办法阻止TinyMCE自动关注页面加载?
这是我的代码看起来像现在
var tinymce = $('#Content');
tinymce.tinymce({
theme: "advanced",
plugins: "...",
theme_advanced_buttons1: "...",
theme_advanced_buttons2: "...",
theme_advanced_buttons3: "...",
theme_advanced_buttons4: "...",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
theme_advanced_resizing: true,
content_css: [...],
template_external_list_url: "lists/template_list.js",
external_link_list_url: "lists/link_list.js",
external_image_list_url: "lists/image_list.js",
media_external_list_url: "lists/media_list.js",
template_replace_values: {
username: "Some User",
staffid: "991234"
}
});
更新:
经过一些测试,它看起来像这个问题只在IE9。 Chrome,FireFox,Opera & Safari在页面加载时不会将焦点设置到编辑器。 IE7和IE8模式下的IE9不会将页面加载设置为焦点,但IE9本身会将焦点设置到编辑器,即使您尝试将焦点设置到另一个输入时也是如此。
这一切,一旦你在textarea的值加载页面,虽然变化。当你这样做IE9像其他浏览器一样工作。现在,我在textarea中加载了一个空格的页面,这使得IE9能够正常工作。
答
将有助于对你的投入和形式结构,剩余知道更好的方法,但沿着这条路线的东西应该有所帮助:
jQuery的
function myCustomOnInit() {
$('form *:input[type!=hidden]:first').focus();
}
tinyMCE.init({
...
oninit : myCustomOnInit
});
此选项,可以指定要execu功能当所有编辑器实例完成初始化时。这很像HTML页面的onload事件。
注:您也可以通过函数的字符串名字。但是在这种情况下,函数必须在页面的全局范围内声明。
这里的关键是要设置第一个可见的输入焦点:
$('form *:input[type!=hidden]:first').focus();
EDITED
我花了相当长的一段时间来测试这一点,并得到它IE9的工作,但在这里它是:
看到这个Working Solution!
jQuery的
setup : function(ed) {
ed.onLoadContent.add(function(ed, o) {
var controlLoad = setTimeout(function() {
if ($('.mceIframeContainer').size()==1) {
$('form *:input[type!=hidden]:first').focus();
clearTimeout(controlLoad);
}
}, 100);
});
}
这是什么做的是运行超时,直到类.mceIframeContainer
发现,这意味着加载完成。找到它之后,为第一个输入元素设置焦点并清除超时。
答
setup: function(ed){
ed.on('postRender', function (editor, cm) { editor.preventDefault(); });
}
,如果你执行它忽略了preventDefault,并保持专注和滚动功能里面一个命令!!!! :D
您使用的是旧版本的TinyMCE吗? – MrCode
我正在使用版本3.5.2 –