使用CKEditor从文本框中触发焦点事件

时间:2011-11-14 05:31:48

标签: jquery asp.net-mvc-3 ckeditor

我正在使用ckeditor来显示格式化文本。我正在使用Asp.net mvc 3 razor帮助方法Html.CKEditorFor(x => x.Description)用于上述目的。我需要实现 此ckeditor中的水印功能。我正在使用以下代码,

    $("#Description").focus(function() {

    $(this).filter(function() {

        // We only want this to apply if there's not
        // something actually entered
        return $(this).val() == "" || $(this).val() == "Type here"

    }).removeClass("watermarkOn").val("");

});       

但是当我关注ckeditor文本框时焦点事件没有触发。所以我使用firebug检查了文档,发现默认文本是在mvc ckeditor helper生成的下面的类('cke_show_borders')中呈现的。所以我修改了上面的代码

    $(".cke_show_borders").focus(function() {
    $(this).filter(function() {

        // We only want this to apply if there's not
        // something actually entered
        return $(this).val() == "" || $(this).val() == "Type here"

    }).removeClass("watermarkOn").val("");

}); 

但焦点事件仍未触发。 我错的地方请帮忙。 感谢。

2 个答案:

答案 0 :(得分:2)

我最好的猜测是你应该尝试使用他们的 API代替jQuery。你看过他们的developer features吗?

顺便说一句,我见过人们使用类似的东西来改变CKEditor的默认行为:

var editor = CKEDITOR.replace('ckeditor');
editor.on('instanceReady', function(e) {
    // customize stuff here
    // this.document.$.childNodes[1].childNodes[1].style.styleName = 'value';
    editor.focus();
});

同样,你可以像这样修改他们的onfocus事件:

editor.on('focus', function(e) {
    // code here
});

答案 1 :(得分:0)

确保您已将此代码放在$(document).ready处理程序中,以确保在尝试订阅任何事件之前已完全加载DOM:

$(function() {
    $('.cke_show_borders').focus(function() {
        $(this).filter(function() {
            // We only want this to apply if there's not
            // something actually entered
            return $(this).val() == '' || $(this).val() == 'Type here';
        }).removeClass('watermarkOn').val('');
    }); 
});