1

使用: grails 1.3.7 fyi。

<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

不明な数の名前を反復処理しているため、おそらくラジオ ボタンの名前をもう少し変更する必要があります。という名前のグループに 100 個のラジオ ボタンを含めることがnameModできます。その場合、それらの 100 個のラジオ ボタンのうち 1 つしか選択できません。これは、あなたが望むものではないと思います。

私がこのようなことをしたとき、私は次のようにしました:

<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>

これにより、名前ごとに 1 つのラジオ グループが与えられ、コントローラーで個別にアクセスできるようになります。

于 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 に答える
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 に答える
0

簡単な方法: ドメイン クラスで名前付きの文字列を宣言するだけです selectedAction (gsp のラジオ ボタンの名前と一致する必要があります)。以上です。GORM がバインド プロセスを処理します。選択したラジオ ボタンの値がselectedAction(ドメイン クラス フィールド) に入力されます。

それ以上何もする必要はありません。うわー!

于 2013-05-04T14:17:05.657 に答える