我的表单上有许多输入字段,其中之一是使用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不会在页面加载时为编辑器设置焦点。IE9在IE7和IE8模式下也不会在页面加载时设置焦点,但是即使您试图将焦点设置为另一个输入,IE9本身也会将焦点设置为编辑器。
但是,当您在textarea中使用值加载页面时,这一切都会发生变化。当您这样做时,IE9就像其他浏览器一样工作。现在,我在textarea中用一个空格加载页面,这使IE9正常工作。
发布于 2012-06-08 17:41:10
可以帮助您获得其余的输入和表单结构,以了解更好的方法,但这方面的一些内容应该会有所帮助:
jQUERY
function myCustomOnInit() {
$('form *:input[type!=hidden]:first').focus();
}
tinyMCE.init({
...
oninit : myCustomOnInit
});
来自文档 的
此选项使您能够指定在所有编辑器实例完成初始化后要执行的函数。这很像HTML页面的onload事件。 注意:,您也可以将函数名作为字符串传递。但是在这种情况下,函数必须在页面的全局范围内声明。
这里的诀窍是为第一个可见输入设置焦点:
$('form *:input[type!=hidden]:first').focus();
看到这个工作实例!
编辑
我花了相当长的时间来测试它并让它在IE9上工作,但如下所示:
看这个工作溶液!
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
之前运行超时,这意味着加载已经完成。在找到它之后,为第一个输入元素设置焦点,超时将被清除。
发布于 2016-07-03 07:27:04
setup: function(ed){
ed.on('postRender', function (editor, cm) { editor.preventDefault(); });
}
如果在函数中执行单个命令,它将忽略preventDefault,并继续聚焦和滚动!:D
https://stackoverflow.com/questions/10944450
复制相似问题