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

发布于 2024-11-08 11:58:43 字数 314 浏览 0 评论 0原文

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

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

使用数据链接插件的 setField 方法更新单选按钮的简单方法是什么(也许需要稍加修改)?也许还有其他替代品/插件?

I have a need to set radio buttons using the setField() method from datalink (the jQuery plugin).

I have read the issues around this on gitHub and seen a fork to address it (https://github.com/jamiemthomas/jquery-datalink), but this is for older versions of jQuery.

What would be an easy way to update radio buttons using the datalink plugin's setField method, perhaps with a slight modification? Maybe there are other alternatives / plugins?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蘸点软妹酱 2024-11-15 11:58:43

感谢登录此问题的评论(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/

Thanks to a comment from an issue logged on this (https://github.com/jquery/jquery-datalink/issues/14#issuecomment-531732), I have adapted the hack found there. By changing the setField method as follows, it works:

(EDIT - added code for setting checkbox as well).

Before:

    if ( target.nodeType ) {
        var setter = fnSetters[ field ] || "attr";
        $(target)[setter](value);

After:

    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);
        }

EDIT - I have also forked the original datalink project on GitHub and added these changes: https://github.com/mydoghasworms/jquery-datalink/

仙女山的月亮 2024-11-15 11:58:43

通过以下更改更新了 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');

Updated mydoghasworm's code with the following changes to fix the "cannot uncheck" issue he was facing with the following two code snippets.

            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 );
                }

Also

} else if ($(target).is(':checkbox')) {
                //value is whether or not checkbox is clicked
                if (value)
                    $(target).attr('checked', true);
                else
                    $(target).removeAttr('checked');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文