2011-05-20 31 views
2

我需要使用数据链路(jQuery插件)中的setField()方法设置单选按钮。在数据链路中使用setField设置单选按钮(jQuery)

我已经阅读了关于gitHub的这个问题,并看到了一个解决它的问题(https://github.com/jamiemthomas/jquery-datalink),但这是针对jQuery的老版本。

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

回答

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/

+0

你有,显示此功能工作的任何demoes?我自己尝试,没有任何运气。我已经将调试器行添加到setField函数中,并且它们没有被击中。 – bobber205 2011-06-28 00:21:06

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'); 
+0

第一段代码在哪里? – GalacticCowboy 2011-09-20 13:06:02

相关问题