2

我有一个 ajax 表单,它当前正在使用该S.error()方法返回错误。这很好,但我还想向元素父 div 标记之一添加一个新的 css 类。我试图用 JE.Call() 方法来做到这一点,但无济于事。有没有人能指出我正确的方向,这将不胜感激。

片段代码

class Register {

  private var user = User.createRecord
  private var pw2 = ""
  private var dob = ""
  private var errors = new Array[String](7)

  val whence = S.referer openOr "/"
  Thread.sleep(400)

  def registerUser(): JsCmd = {

     errors(0) = User.validateUsername(user.username.is)
     errors(1) = User.validateEmail(user.email.is)
     errors(2) = User.validatePhone(user.phone.is)
     errors(3) = User.validateCity(user.city.is)
     errors(4) = User.validateDOB(dob)
     errors(5) = User.validatePassword(user.uPw.is)
     errors(6) = User.validateSecondPW(user.uPw.is, pw2) 

    if(errors.count(_ != "") == 0) {
      user.uPw.set(User.hashPassword(user.uPw.is, user.id.is.toString))
      user.dob.set(User.stringToDate(dob))
      user.save
      println("User id " + user.id.is.toString + " added to database")
      S.redirectTo(whence)
    }else{
      if(errors(0) != "") 
         S.error("username-error", errors(0))
         JE.Call("addError(username-error)")

         ......

    }
  }

  def form = {
      "id=username" #> SHtml.text("", user.username.set(_), "placeholder" -> "Username") &
      "id=email" #> SHtml.email("", user.email.set(_), "placeholder" -> "Email") &
      "id=phone" #> SHtml.text("", user.phone.set(_), "placeholder" -> "Tel") &   
      "id=city" #> SHtml.text("", user.city.set(_), "placeholder" -> "City") &
      "id=dob" #> SHtml.text("", dob = _, "placeholder" -> "DOB") &
      "id=password" #> SHtml.password("", user.uPw.set(_), "placeholder" -> "Password") &
      "id=passwordCheck" #> SHtml.password("", pw2 = _, "placeholder" -> "Confirm Password") &
      "type=submit" #> SHtml.ajaxSubmit("Register", () => registerUser, "class" -> "btn")
  }

}

HTML 模板

   <h2>Register</h1>
      <form class="lift:form.ajax?class=form-horizontal">
        <div class="lift:Register.form">

        <div id="id1" class="control-group">
          <label class="control-label" for="username">Username:</label>
          <div class="controls">
            <input id="username">
            <span id="username-error" class="help-inline"></span>                
          </div>
        </div>


        <div class="controls">
          <button type="submit" ></button>
        </div>
      </div>
   </form>

Javascript 函数

  <script>
    function addError(id) {
      $("#"+id).closest(".control-group").addClass("error");
    }
    addError("email-error")
  </script>
4

2 回答 2

0

尝试更改呼叫功能。

 JE.Call("addError","username-error").cmd
于 2012-10-10T11:16:06.193 回答
0

我建议在 Lift 中放弃 JavaScript 抽象,并在任何地方使用普通的 Run Object。所以在你的情况下,我会使用:

Run("addError(username-error)")
于 2012-10-11T07:32:47.923 回答