在datalink(jQuery)中使用setField设置单选按钮

时间:2011-05-20 12:20:31

标签: jquery jquery-plugins

我需要使用datalink(jQuery插件)中的setField()方法设置单选按钮。

我已经在gitHub上阅读了这个问题,并看到了一个解决它的问题(https://github.com/jamiemthomas/jquery-datalink),但这适用于旧版本的jQuery。

使用数据链接插件的setField方法更新单选按钮的简单方法是什么,可能稍作修改?也许有其他替代品/插件?

2 个答案:

答案 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');