0

根据用户的选择让未选中的框是合理的,但是未选中的框总是会导致服务器端的表单错误,

def config(path: String) = Action { implicit request =>
    configForm.bindFromRequest.fold(
      formWithErrors => { // if checkedbox is not checked, the action in the server side will match this line
        BadRequest(formWithErrors.toString)
      },
      configs => {
        . ....})}

配置表单:

val configForm = Form(
    mapping(
      "k" -> optional(number),
      "gc" -> optional(text),
      "doStateCutOff" -> optional(text),
      "stateCutoff" -> number(),
       "doTimeCutOff" -> optional(text),
      "timeCutoff" -> number(), 
      "doRegex" -> optional(text),
      "regex" -> nonEmptyText,
      "dochecklist" -> optional(text), 

      "pl" -> mapping(

       "fs" -> checked("File System"),
      "fsh" -> nonEmptyText,

      "location" -> checked("Location"),
      "locationh" -> nonEmptyText,

      "pic" -> checked("Picture"),
      "pich" -> nonEmptyText,

      "deviceid" -> checked("DeviceID"),
      "deviceidh" -> nonEmptyText,

      "network" -> checked("Network"),
      "networkh" -> nonEmptyText
      )
      { (_, fs, _, loc, _, pic, _, dev, _, ntw ) => PropertyCheckList(fs,  loc,  pic, dev, ntw)  }
       { pl => Some(true, pl.filesystem, true, pl.location, true, pl.picture,true, pl.deviceid, true, pl.network)} 
          ) 
    { 
      (k, gc, doStateCutOff, stateCutoff, doTimeCutoff, timeCutoff,//verbose, 
          doRegex, regex, dochecklist,  
          propertyList ) 
      => { 
         Configs(k, gc, doStateCutOff, stateCutoff, doTimeCutoff, timeCutoff,
             doRegex, regex, dochecklist,  
             propertyList
             ) } 
      }

    { 
      configs => { 

        Some(configs.k, configs.gc, configs.doStateCutOff, configs.stateCutoff, configs.doTimeCutoff, configs.timeCutoff, 
            configs.doRegex, configs.regex, configs.dochecklist,  
          configs.propertyList ) 
      }
    } 
      )

然后我想出了一个解决方法,只需将附加的输入文本框更改为复选框,每当单击复选框时,我就会翻转输入文本框中的值,并将复选框设置为始终为真,这样服务器就不会抱怨。

那么问题是,无论我尝试基于答案Setting "checked" for a checkbox with jQuery? 它只是不工作!

复选框的值只能由服务器端设置吗??????

在表格中:

  @checkbox(
            configForm("fs"), 
            '_id -> "fs",
            '_label -> "File System", 
            '_showConstraints -> false
        )

   @inputText(  configForm("fsh"), 
                '_id -> "fsh",
              '_showConstraints -> false
         )

在脚本中:

我尝试测试设置的复选框值(在服务器端初始化表单时,我将复选框初始值设置为 false):

 <script>
        $(document).ready(function (){ 

       var curO = $("#fs").is(":checked");
                if(!curO) {
                  alert(!curO) // true
                  $("#fs").attr('checked', 'checked'); // prop does not work too.. 
                   alert($("#fs").is(":checked")); // still false
                  }

并在复选框事件功能中:

$("#fs").onchange(function(){
                var curO = $("#fs").is(":checked");
                if(!curO) {
                  $(this).attr("checked", !curO);
                  }

                var curInput = $("#fsh").val();
                if(curInput == "true"){
                    $("#fsh").val("false") ; 
                }else {
                $("#fsh").val("true") ; 
                }

感谢您的任何提示!!!

4

2 回答 2

2

然后我想出了一个解决方法,只要单击复选框,只需将附加的输入文本框更改为复选框,

如果您的意思是在创建元素并将其插入文档后更改元素的type属性,<input>请注意,如果您必须支持它们,则在 IE 6/7/8 中不起作用。您可能希望同时创建并根据需要隐藏/删除。

$("#fs").attr('checked', 'checked'); // prop does not work too..

你试过这个吗?

$("#fs").prop('checked', true);

要切换复选框,

  var curO = $("#fs").is(":checked");
  if(!curO) {
    $(this).attr("checked", !curO);
  }

此代码块可以替换为:

this.checked = !this.checked;

虽然如果你想使用 jQuery(这里不需要)你可以使用:

$(this).prop("checked", !this.checked);

于 2013-04-16T13:26:57.753 回答
1

尝试将您的fs字段声明为boolean您的表单类。我对 Scala 不是很熟悉,但我认为这checked(...)是使该字段成为必填项的原因,这就是在未选中复选框时表单提交失败的原因。

val configForm = Form(
  ...
  "fs" -> boolean,
  ...
}
于 2013-04-16T22:01:50.707 回答