【问题标题】:get checkbox state from controller从控制器获取复选框状态
【发布时间】:2014-09-03 13:01:49
【问题描述】:

我的 Grails 项目我有一个复选框。我想在复选框的onCheck() 方法中调用remoteFunction,如下所示:

if(checkbox.isChecked)
{
    //do something
}
else
{
    //do some other thing
}

事实是,我不知道在选中/取消选中后如何获取控制器中复选框的状态。是否需要使用一些javascript代码? 有什么建议吗?

编辑: 这是复选框

<g:checkBox name="hasStampDuty" value="${receiptInstance?.hasStampDuty}"
            onclick="${remoteFunction(
                    controller: 'Receipt',
                    action: 'addStampDuty',
                    params: '\'id=\' + this.id+\'ischecked=\'+this.checked',
                    onSuccess: 'updateTotalAmount(\'totalAmount\', data, \'00000\')')}"
/>

其中addStampDuty如下:

def addStampDuty(Long id, boolean ischecked)
{
    //add stamp duty value
    def receiptInstance = Receipt.get(id)
    if(ischecked != null)
    {
        if(ischecked) {
                  //do something
        }
        else {
              //do some other
        }

    }

}

id 始终为空...

【问题讨论】:

  • 控制器中复选框的状态是元素是否在参数中以值退出。例如,如果您有一个名为“某物”的元素,并且在将表单发送到您的控制器时对其进行检查 params.something 将有一个值。如果未选中,则 params.something 将没有值。
  • 事实是我需要在sumbit之前检查复选框,所以params没有params.something
  • 那么您可能需要重新表述您的问题,因为您说“获取控制器中复选框的当前状态”。

标签: javascript grails checkbox controller


【解决方案1】:

一般情况下,复选框的状态是通过参数传递给动作的。如上面的 cmets 所述,是否存在具有“${fieldName}.selected”形式的参数表示复选框是否被选中(选中)。我同意这有点尴尬。但是,如果您直接使用参数,那么您可能已经搞砸了该合同。

您可以将以下代码放在操作的开头,以查看它在 params 中传递的确切内容:

   log.info("Executing \"blah\" action.")
   params.each { log.info("Param ${it.key} = {$it.value}") }

附带说明,如果您想对所有操作执行此操作,请创建一个过滤器(请参阅 Grails 过滤器)并根据需要进行横切。

最后,我相信 Grails AJAX 包装标签已被弃用,您应该避免使用它们。只需使用 jquery(或任何您喜欢的)AJAX 客户端支持发布表单,并让表单字段填充普通 Grails 约定中的参数。你应该阅读

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多