3

jQuery Validate プラグインを使用して検証しているフォームがあります。1つのことを除いて、すべてが正常に機能しています。

私が使用しているフィールド、リモート ルールがあり、同じ名前のアプリケーション レコードが既に存在するかどうかを確認するために AJAX を使用しています。ユーザーがフィールドの値を変更した場合にのみ、この検証を実行する必要があります。

これは私が持っている検証コードです:

$('#createapp').validate({
    rules: {
      appname: {
        minlength: 8,
        required: true,
        remote: {
                url: "<?php echo base_url();?>app/application/check_app",
                type:"POST",
                async: false,
                data:  {
                appname: function() {
                return $("#appname").val();
          }
        }  
      }
      },
      apptitle: {
        required: true
      }
    },
    messages: {
        appname: {
      remote: "Application with same name already exists"
      }
     },
    highlight: function(label) {
        $(label).closest('.control-group').addClass('error');
    },
    success: function(label) {
        label
            .text('OK!').addClass('valid')
            .closest('.control-group').addClass('success');
    }
  });

私はこれを行う必要があります:

ユーザーが appname フィールドのテキストを変更した場合にのみ、リモート検証を実行します。私は依存を使用しようとしましたが、それを機能させることができません。これは基本的に私が試したことです:

remote: {
            depends: function(element){
            return ($('#appname').val() != "<?php echo trim($application[0]->app_name) ?>" );
            }
4

2 に答える 2

0

@ユーザー1017268

これも同様に機能しますが、失敗することが予想されます;-) リモート検証ルールを別のメソッドに交換すると、(coffeescript) のようなことができます:

getEmailRule = () ->
  which = window.location.pathname.split('/')[1]
  if which == 'renew' then required: true
  else remote: { url: "/user/exists", type: "POST", async: false } 

isValid = $('#subscriptionForm').validate({
  rules: {
    email:      getEmailRule()
    password:   "strongPass"
    orderTotal: "gtZero"
  }
}).form()

email must exist更新するユーザーがすでにログインしているため、サブスクリプションの非更新(つまり、サインアップ)のリモートメール存在チェックのみを実行します;-)

于 2012-06-13T19:16:38.233 に答える
0

私は最終的に回避策を使用しました。次のとおりです

  1. 元の名前を隠しパラメータとして渡します

    <input type="hidden" name="orgappletname" id="orgappletname"
      value="<?php echo $applet[0]->applet_name ?>">
    
  2. jQuery をセットアップして元の名前と比較し、blur で何かが変更されたかどうかを確認します。はいの場合は、ajax リクエストをトリガーして、変更された名前を確認します。

    $('#appletname').blur(function(){
     if($(this).val() != $('#orgappname').val()){
        $.ajax({
            url: "<?php echo base_url() . "apl/applet/check_applet" ?>",
            data: "appletname=" + $(this).val(),
            type: "POST",
            success: function (msg) {
            }
        });
      }
      });
    

これが正しい方法かどうかはわかりませんが、私にとってはうまくいきます。

于 2012-05-20T03:04:06.943 に答える