jQuery inputmask使CKEditor适配器停止工作 我有以下表格: 发布开始-2x输入s,一个用于时间,一个用于日期 发布结束-2x输入s,一个用于时间,一个用于日期 帖子内容-1xtextarea

jQuery inputmask使CKEditor适配器停止工作 我有以下表格: 发布开始-2x输入s,一个用于时间,一个用于日期 发布结束-2x输入s,一个用于时间,一个用于日期 帖子内容-1xtextarea,jquery,internet-explorer,webkit,ckeditor,jquery-inputmask,Jquery,Internet Explorer,Webkit,Ckeditor,Jquery Inputmask,日期/时间使用和文本区域使用的输入(使用,将ckeditor公开给$()和val()) 使用适配器,我可以: 使用$('#idOfTextarea').val()代替CKEDITOR.instances['idOfTextarea'].getData() 使用$('idOfTextarea').val('some value')代替CKEDITOR.instances['idOfTextarea'].setData('some value') 问题是: IE(v9)和Webkits(Chr

日期/时间使用和文本区域使用的输入(使用,将ckeditor公开给
$()
val()

使用适配器,我可以:

  • 使用
    $('#idOfTextarea').val()
    代替
    CKEDITOR.instances['idOfTextarea'].getData()
  • 使用
    $('idOfTextarea').val('some value')
    代替
    CKEDITOR.instances['idOfTextarea'].setData('some value')
问题是:
  • IE(v9)和Webkits(Chrome v30和v31,Safari v5.1):
    val()
    在我用inputmask绑定输入时停止工作
  • Firefox(v22)和Opera(v12.16):继续工作
    val()
演示: 以下是小提琴的例子:

  • 在CKEditor上编写一些内容,并使用控制台上的print CKEditor.val()和控制台上的print CKEditor.getData()链接对其进行测试

  • 单击上述输入上的绑定输入掩码,然后再次单击打印测试。
    val()
    将停止工作,而
    getData
    (本机ck实现)将继续工作

  • 我找不到问题是否与适配器或输入掩码有关:(


    更新: 我发现ck adapter和inputmask都在
    $.fn.val
    上生成了一个
    $.extend
    。似乎
    $.fn.val
    在浏览器上被覆盖,适配器停止工作,而不是实际扩展(imo,必须同时保存这两个扩展,不是吗?)

    $.fn.val
    在输入掩码(chrome)之前:

    $.fn.val
    在输入掩码(chrome)之后:

    在Firefox上,
    $.fn.val
    始终不变(在调用inputmask时不会更改)


    有没有办法将inputmask的extend与ckeditor one合并?

    对于有一天遇到此错误的人,我与(的创建者)进行了交谈,似乎问题在于:

    n.inputmask.val.apply(t,r);
    调用原始
    fn.val
    code。 因此,inputmask在插入html时生成ref(而不是通过
    $(选择器).inputmask()
    )调用它)。它将
    $.fn.val
    缓存到
    $.inputmask.val
    上,但在使用
    .inputmask()
    调用时实际扩展它。然后,ckeditor修改val(稍后调用)但由于inputmask缓存了ckeditor extend之前的原始val,因此它会覆盖ckeditor val


    以这个想法为基础,我测试了将ckeditor脚本移动到inputmask脚本之前的位置

    似乎它在那些显示被覆盖的
    $.fn.val
    now:dancer:

    有关更多信息,请查看

    function(d) {
        if (arguments.length) {
            var k = this,
                i = [],
                f = this.each(function() {
                    var b = a(this),
                        c = b.data("ckeditorInstance");
                    if (b.is("textarea") && c) {
                        var f = new a.Deferred;
                        c.setData(d, function() {
                            f.resolve()
                        });
                        i.push(f.promise());
                        return !0
                    }
                    return g.call(b, d)
                });
            if (i.length) {
                var b = new a.Deferred;
                a.when.apply(this, i).done(function() {
                    b.resolveWith(k)
                });
                return b.promise()
            }
            return f
        }
        var f = a(this).eq(0),
            c = f.data("ckeditorInstance");
        return f.is("textarea") && c ? c.getData() : g.call(f)
    }
    
    function() {
        var t, i, r;
        return arguments.length == 0 ? (t = n(this), t.data("inputmask") ? t.data("inputmask").autoUnmask ? t.inputmask("unmaskedvalue") : (i = n.inputmask.val.apply(t), i != t.data("inputmask")._buffer.join("") ? i : "") : n.inputmask.val.apply(t)) : (r = arguments, this.each(function() {
            var t = n(this),
                i = n.inputmask.val.apply(t, r);
            return t.data("inputmask") && t.triggerHandler("setvalue.inputmask"), i
        }))
    }