2012-06-08 84 views
9

我的窗体上有很多输入字段,其中一个使用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能够正常工作。

+2

您使用的是旧版本的TinyMCE吗? – MrCode

+0

我正在使用版本3.5.2 –

回答

1

将有助于对你的投入和形式结构,剩余知道更好的方法,但沿着这条路线的东西应该有所帮助:

jQuery的

function myCustomOnInit() { 
    $('form *:input[type!=hidden]:first').focus(); 
} 

tinyMCE.init({ 
     ... 
     oninit : myCustomOnInit 
}); 

Documentation

此选项,可以指定要execu功能当所有编辑器实例完成初始化时。这很像HTML页面的onload事件。

注:您也可以通过函数的字符串名字。但是在这种情况下,函数必须在页面的全局范围内声明。

这里的关键是要设置第一个可见的输入焦点:

$('form *:input[type!=hidden]:first').focus(); 

working example


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发现,这意味着加载完成。找到它之后,为第一个输入元素设置焦点并清除超时。

+0

编辑为此解决方案添加[工作示例](http://dl.dropbox.com/u/76169930/stackoverflow/question/10944450/tinymce/examples/index.html) ,即使没有'tinyMCE'插件的'oninit'。 – Zuul

+0

这项工作,但不适用于IE9。我用一些新的发现更新了我的问题。 –

+0

@BrianSurowiec,花了我相当多的时间来处理IE9问题,但只是编辑了一个适合你的工作和测试解决方案的答案! – Zuul

-1
setup: function(ed){ 
    ed.on('postRender', function (editor, cm) { editor.preventDefault(); }); 
} 

,如果你执行它忽略了preventDefault,并保持专注和滚动功能里面一个命令!!!! :D

相关问题