我有以下表格:
- Publish Start - 2x
input
s,一为时间,一为日期; - Publish End - 2x
input
s,一为时间,一为日期; - 发布内容- 1x
textarea
。
日期/时间的输入使用jQuery InputMask和 textarea 使用CKEditor(使用jQuery Adapter,将 ckeditor 暴露给$()
and 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()
演示:
这是小提琴的例子:http: //jsfiddle.net/RaphaelDDL/QjVf8/
在 CKEditor 上写一些东西并在控制台上使用print ckeditor .val()和在控制台链接上打印 ckeditor .getData() 来测试它。
单击上述输入上的绑定输入掩码,然后再次单击打印测试。将
val()
停止工作,而getData
(本机 ck 实现)将继续工作。
我找不到问题是适配器还是输入掩码:(
更新:
我发现 ck 适配器和 inputmask 都创建了$.extend
on $.fn.val
。似乎$.fn.val
在适配器停止工作的浏览器上被覆盖,而不是实际扩展(imo,必须同时保持两个扩展,不是吗?)
$.fn.val
在输入掩码(铬)之前:
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)
}
$.fn.val
在输入掩码(铬)之后:
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
}))
}
在 Firefox 上,$.fn.val
总是相同的(当我调用 inputmask 时不会改变)。
有没有办法可以将 inputmask 的扩展与 ckeditor 合并?