jQuery inputmask使CKEditor适配器停止工作 我有以下表格: 发布开始-2x输入s,一个用于时间,一个用于日期 发布结束-2x输入s,一个用于时间,一个用于日期 帖子内容-1xtextarea
日期/时间使用和文本区域使用的输入(使用,将ckeditor公开给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
$()
和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):
在我用inputmask绑定输入时停止工作李>val()
- Firefox(v22)和Opera(v12.16):继续工作
val()
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
}))
}