1

使用:grails 1.3.7 仅供参考。

<g:each var="name" in="${nameList}">
 <li>${name.first}</li>
 <input id="Add" type="radio" name="nameMod" value="${name.first}"/>Add
 <input id="Modify" type="radio" name="nameMod" value="${name.first}"/>Modify
 <g:hiddenField name="action" value="${nameMod.id} "/>
</g:each>

所以这就是我想要做的:我知道如何获取单选按钮的值,但是,我还需要知道按下了哪个按钮。正如您从上面看到的,我尝试将单选按钮的 ID 设置为操作(添加/修改),但我收到一条错误消息,指出该.id属性无效。我知道如何在 jQuery 中测试单选按钮是否被选中,但我不确定如何将值从 jQuery 获取到控制器或域类。

还有另一种方法吗?基本上我需要知道动作和名称,以便我可以更新数据库。

感谢您的任何建议!(我可以这么说吗?编辑掉!!;))

4

5 回答 5

2

将一些类(仅在 javaScript 中使用)添加到您的单选按钮,然后使用它!

<g:each var="name" in="${nameList}">
 <li>${name.first}</li>
 <input id="Add" type="radio" name="nameMod" class="f_radioButtonGroup" value="${name.first}"/>Add
 <input id="Modify" type="radio" name="nameMod" class="f_radioButtonGroup" value="${name.first}"/>Modify
 <g:hiddenField name="action" value="${nameMod.id} "/>
</g:each>

并在 javaScript 函数中

function getCheckedItemNumber() {
    var result;
    var radioButtons = $(".f_radioButtonGroup");
    for (var i = 0; i < radioButtons.length; i++) {
        if (radioButtons[i].checked) {
            result = radioButtons[i].value;
        }
    }
    return result
}
于 2012-07-26T05:22:28.470 回答
1

也许是这样的:

 <g:each var="name" in="${nameList}">
   <li>${name.first}</li>
  <input id="Add" type="radio" name="selectedAction" value="add"/>Add
  <input id="Modify" type="radio" name="selectedAction" value="modify"/>Modify
  <g:hiddenField name="nameMod" value="${name.first} "/>
 </g:each>
于 2012-07-20T19:59:43.207 回答
1

您可能需要对单选按钮名称做更多的事情,因为您正在迭代未知数量的名称。您可以在一个名为的组中有 100 个单选按钮nameMod- 然后您只能选择这 100 个单选按钮中的一个 - 我认为这不是您想要的。

当我遇到这样的事情时,我会这样做:

<g:each var="name" in="${nameList}">
  <li>${name.first}</li>
  <input type="radio" name="nameMod_${name.id}" value="add"/>Add
  <input type="radio" name="nameMod_${name.id}" value="modify"/>Modify
  <g:hiddenField name="name_${name.id}" value="${name.first} "/>
</g:each>

这将为每个名称提供一个无线电组,并允许您在控制器中单独访问它们。

于 2012-07-20T20:04:04.250 回答
1

您可以使用 jQuery 来做到这一点,但这对于使用命令对象来说是一个很好的例子:

看法:

<g:each var="name" in="${nameList}" status="i">
  <li>${name.first}</li>
  <input type="radio" name="nameAction[${i}]" value="add"/>Add
  <input type="radio" name="nameAction[${i}]" value="modify"/>Modify
  <g:hiddenField name="name[${i}]" value="${name.first} "/>
</g:each>

命令对象:

class NameCommand {
    List<String> nameAction = []
    List<String> name = []
}

控制器:

def theAction = { NameCommand foo ->
    foo.nameAction.eachWithIndex { val, index ->
        if (val == "add") {
            whateverService.add(foo.name[index]) 
        }
        else {
            whateverService.modify(foo.name[index])
        }
    }
}
于 2012-07-21T04:25:30.470 回答
0

简单的方法: 只需在您的域类中声明一个带有名称的字符串 (必须与 gsp 中单选按钮的名称匹配) 。就是这样,GORM 将负责绑定过程;所选单选按钮的值将被放入(域类字段)。selectedAction selectedAction

你不需要做更多的事情。哇!

于 2013-05-04T14:17:05.657 回答