有没有办法阻止TinyMCE自动关注页面加载?

时间:2012-06-08 07:07:24

标签: javascript jquery tinymce

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

2 个答案:

答案 0 :(得分:1)

有助于让剩下的输入和表单结构知道更好的方法,但是这方面的内容应该有所帮助:

<强> JQUERY

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

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

来自Documentation

  

此选项使您可以指定在所有编辑器实例完成初始化时要执行的函数。这很像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之前运行超时,这意味着加载完成。找到它后,设置第一个输入元素的焦点,并清除超时。

答案 1 :(得分:-1)

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

如果你在函数中执行一个命令,它会忽略preventDefault并保持聚焦和滚动! :d