0

Railsアプリケーションでclient_side_validationsgemを使用してフォームを検証しています。送信時に、検証を行うフォームの関数がいくつか追加されています。client_side_validationsgemの機能の範囲外であるカスタム検証を自分で実行する必要があるため、それを使用して追加するとform.submit = function、両方の検証が呼び出されます。しかし、フォームを送信するか送信しないかの決定がどのように行われるのかわかりません。両方の関数がfalseを返す場合は送信する必要がありますが、一方がtrueを返しても、フォームは待機せずに送信されるようです。もう一方がその値を返すために、このような場合をどのように処理できますか?それは、client_side_validations JavaScriptファイル内にコードを挿入することを意味するため、1つの関数にすることはできません。

任意のアイデアや助けをいただければ幸いです。

参照用のカスタム検証コードは次のとおりです。

 $('#new_business').submit ->
    that = $('#business_referrer_code')
    if(that.attr("validated") == "true")
      return true
    else
      code = $('#business_referrer_code')
      $.ajax '/representatives/validate_code',
        type: 'GET'
        dataType: 'json'
        data: "code=#{code.val()}"
        success: (data, textStatus, jqXHR) ->
          if(data.error)
            that.after("<label class='message'> Invalid Reference Code</label>")
          else
            that.attr("validated", true)
            that.submit()
      false
    true

client_side_validationsによって自動生成される他のコードは変更できません。

4

2 に答える 2

0

Here is a solution you could try:

onsubmit="return validateName() && validatePhone() && validateAddress() && validateEmail()"
于 2014-05-09T11:05:00.810 に答える
-1

クライアント側のパラメーターを使用している場合は、次のようにすることができます。

<script type="text/javascript">
    function checkValues()
    {
        var value1 = functionGetValue1Value();
        var value2 = functionGetValue2Value();

        if (value1 == True && value2 == True)
        {
            completeSubmit();
        }
    }

    function completeSubmit()
    {
        // create a (post) request to some destination.
    }
</script>
<form action="javascript:checkValues();">
    <submit value="submit" />
</form>

クライアント側の変数 (?) をサーバーに渡して、サーバー上で確認することもできます。

これを行うと、ネットワーク上でスニッフィングしている誰かがこれらの変数を取得して、セッションなどをハイジャックする可能性があります。ただし、ユーザーが js コードを編集してパススルーできる純粋なクライアント側の検証よりは優れています。

于 2012-10-05T20:51:39.927 に答える