我需要使用datalink(jQuery插件)中的setField()方法设置单选按钮。
我已经在gitHub上阅读了这个问题,并看到了一个解决它的问题(https://github.com/jamiemthomas/jquery-datalink),但这适用于旧版本的jQuery。
使用数据链接插件的setField方法更新单选按钮的简单方法是什么,可能稍作修改?也许有其他替代品/插件?
答案 0 :(得分:4)
感谢您登录此问题的评论(https://github.com/jquery/jquery-datalink/issues/14#issuecomment-531732),我已经调整了那里发现的黑客行为。通过如下更改setField方法,它可以工作:
(编辑 - 添加了设置复选框的代码)。
在:
if ( target.nodeType ) {
var setter = fnSetters[ field ] || "attr";
$(target)[setter](value);
后:
if ( target.nodeType ) {
var setter = fnSetters[ field ] || "attr";
/* Hack to set radio buttons */
if ($(target).is(':radio')) {
$(target).parent().children(":radio[value='" + value + "']").attr('checked', true);
} else if ($(target).is(':checkbox')) {
if (target.value == value) $(target).attr('checked', true);
} else {
$(target)[setter](value);
}
编辑 - 我还在GitHub上分享了原始数据链接项目并添加了这些更改:https://github.com/mydoghasworms/jquery-datalink/
答案 1 :(得分:1)
更新了mydoghasworm的代码并进行了以下更改,以修复他面临的“无法取消选中”问题以及以下两个代码段。
if ( m ) {
var name = m.name,
value = m.value,
convert = m.convert;
if (ev.target.attributes['type'].nodeValue === "checkbox") {
value = ev.target.checked;
}
if ( convert ) {
value = convert( value, ev.target, target );
}
if ( value !== undefined ) {
$.setField( target, name, value );
}
另外
} else if ($(target).is(':checkbox')) {
//value is whether or not checkbox is clicked
if (value)
$(target).attr('checked', true);
else
$(target).removeAttr('checked');