我的表单上有很多输入字段,其中一个是使用TinyMCE(版本3.5.2)。一旦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正常工作。
答案 0 :(得分:1)
有助于让剩下的输入和表单结构知道更好的方法,但是这方面的内容应该有所帮助:
<强> JQUERY 强>
function myCustomOnInit() {
$('form *:input[type!=hidden]:first').focus();
}
tinyMCE.init({
...
oninit : myCustomOnInit
});
此选项使您可以指定在所有编辑器实例完成初始化时要执行的函数。这很像HTML页面的onload事件。
注意:您还可以将函数名称作为字符串传递。但在这种情况下,必须在页面的全局范围内声明该函数。
这里的技巧是为第一个可见输入设置焦点:
$('form *:input[type!=hidden]:first').focus();
请参阅此working example!
我花了很长时间来测试这个并让它适用于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
之前运行超时,这意味着加载完成。找到它后,设置第一个输入元素的焦点,并清除超时。
答案 1 :(得分:-1)
setup: function(ed){
ed.on('postRender', function (editor, cm) { editor.preventDefault(); });
}
如果你在函数中执行一个命令,它会忽略preventDefault并保持聚焦和滚动! :d