input
s,一个用于时间,一个用于日期; input
s,一个用于时间,一个用于日期; 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');
val()
在我将输入绑定的那一刻停止工作输入掩码; val()
以下是小提琴示例:http://jsfiddle.net/RaphaelDDL/QjVf8/
在CKEditor上写一些内容并使用 打印控制台上的ckeditor .val() 和 打印ckeditor .getData()进行测试在控制台上 链接。
单击上面输入 绑定输入掩码 ,然后再次单击打印测试。 val()
将停止工作,而getData
(原生ck实施)将继续有效。
我无法找到问题是适配器还是输入掩码:(
我发现ck适配器和输入掩码都在$.extend
上生成$.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)
}
输入掩码(chrome)之后 $.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合并?
答案 0 :(得分:0)
对于那些有一天遇到此错误的人,我已经与RobinHerbots(jquery-inputmask的创建者)进行了交谈,似乎问题是:
n.inputmask.val.apply(t, r);
会调用原始fn.val
代码。
因此,输入掩码在将其插入到html时(而不是通过$(selector).inputmask()
调用时)生成ref。它将$.fn.val
缓存到$.inputmask.val
上,但实际上只是在使用.inputmask()
调用时对其进行扩展。然后ckeditor稍后修改val(稍后调用),但由于inputmask已经缓存了ckeditor扩展之前的原始val,它会覆盖ckeditor一个。
使用这个想法作为基础,我测试了在输入掩码脚本之前移动ckeditor脚本。我对改变最后http://jsfiddle.net/RaphaelDDL/QjVf8/8/的脚本的小提琴进行了修改(参见外部资源)。
似乎它适用于现在显示被覆盖$.fn.val
的浏览器:舞者:
有关详情,请查看https://github.com/RobinHerbots/jquery.inputmask/issues/319