【发布时间】:2013-08-27 14:33:54
【问题描述】:
我有以下表格:
-
发布开始 - 2x
inputs,1 个时间,1 个日期; -
Publish End - 2x
inputs,1 个时间,1 个日期; -
发布内容 - 1x
textarea。
日期/时间输入使用jQuery InputMask,textarea 使用CKEditor(使用jQuery Adapter,将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()
演示:
这里是小提琴的例子:http://jsfiddle.net/RaphaelDDL/QjVf8/
-
在 CKEditor 上写一些东西并使用 在控制台上打印 ckeditor .val() 和 在控制台上打印 ckeditor .getData() 来测试它 链接。
-
点击在上述输入上绑定输入掩码,然后再次点击打印测试。
val()将停止工作,而getData(本地 ck 实现) 将继续工作。
我找不到问题是适配器还是输入掩码:(
更新:
我发现 ck 适配器和输入掩码都在 $.fn.val 上生成了一个 $.extend。似乎$.fn.val 在适配器停止工作的浏览器上被覆盖,而不是实际扩展(imo,必须同时保持两个扩展,不是吗?)
$.fn.val 在 inputmask (chrome) 之前:
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 (chrome):
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 合并?
【问题讨论】:
标签: jquery internet-explorer webkit ckeditor jquery-inputmask