0

fiftyCents()2つのルールがある場合に呼び出されるカスタムjQuery検証ルールがあります。

  1. アイテムが無料の場合、0.00ドルで「購入」するか、0.50ドル以上支払うことができます。
  2. アイテムが無料でない場合は、少なくとも指定されたコスト(非表示のcachedValue入力フィールドに保存されている)を支払う必要があります。

これが私の2つの検証エラーメッセージです。これらを追加する際に私が抱えている問題fiftyCents()は、それをtrue / falseとして評価する方法しか理解できず、falseの場合、単一のメッセージを表示すること"Amount must be $0.00 OR greater than $0.50."です。

JSfiddle(以下のコードも)の解決策messageは、関数の一部となる可能性のあるオブジェクトを作成することであるように思われfiftyCents()ます。returnしかし、評価と一緒にそれを行う方法がわかりませんtrue/false。考え?

JS:

$('button').click(function(){
  $('form').validate().form();
});
$.validator.addMethod("fiftyCents", function(value) {

  var cachedValue=$('.purchaseModalAmtPaidCached').val();
  var value = $('.purchaseModalAmtPaid').val();
  var message="Amount must be $0.00 OR greater than $0.50.";
  if(cachedValue>0) message='Amount must be at least'+cachedValue+'.';
  return cachedValue<=value && (value==0 || (0.51<=value && value<=10000));
}, message);   

$.validator.classRuleSettings.purchaseModalAmtPaid = { fiftyCents: true };

HTML:

 <form>
  <input  class="purchaseModalPassword required" minlength="8" type="password"name="password" value="dddddddv" title="Please enter a valid password"  />
  <input type="text"  title="Amount must be $0.00 OR greater than $0.50" 
  class="required purchaseModalAmtPaid" name="amt_paid" value="" />
  <input type="hidden" class='purchaseModalAmtPaidCached required' name="AmtPaidCached" value="0.00" /> 
  <button type='button'>Buy</button>
 </form>​
4

1 に答える 1

0

わかりました私は自分の質問に答えました。私が最終的に行ったことは、2 つのルールを独自のカスタム メソッドに分割することです。どちらかのカスタム メソッドが呼び出される前に を使用して、if/elseどちらに従うべきかを判断しました。

JSFiddle とコードは次のとおりです。

JS:

$('button').click(function(){
$('form').validate().form();

});

var params=$('.purchaseModalAmtPaidCached').val();                   
if(params>0){      
  $.validator.addMethod("AmountOrGreater", function(value, element, params) {
  console.log('amountOrGreater'+params[0]); 
  return params[0]<=value && (value==0 || (0.51<=value && value<=10000));
  }, $.validator.format("Amount must be at least {0}."));
  $.validator.classRuleSettings.purchaseModalAmtPaid = { AmountOrGreater: params };                       
} 
else{ 
  $.validator.addMethod("fiftyCents", function(value, element, params) {
  console.log('fiftyCents'+params[0]);
  return params[0]<=value && (value==0 || (0.51<=value && value<=10000));
  }, "Amount must be $0.00 OR greater than $0.50.");  
  $.validator.classRuleSettings.purchaseModalAmtPaid = { fiftyCents: params };  
} //else

HTML:

 <form>
  <input  class="purchaseModalPassword required" minlength="8" type="password" name="password" value="dddddddv" title="Please enter a valid password"  />
  <input type="text"   
class="required purchaseModalAmtPaid" name="amt_paid" value=""  /> 
  <input type="hidden" class='purchaseModalAmtPaidCached required' name="AmtPaidCached" value="0.00" /> 
  <button type='button'>Buy</button>
</form>​

注: jQuery 検証と連携する HTML の鍵は、入力にtitle=''属性を指定すると、そのタイトルが常に使用されるため、カスタム ルールでメッセージがオーバーライドされることです。これは、2 つのカスタム ルール/メッセージがあり、HTML がレンダリングされる前に、どちらがユーザーに表示されるかを判断できないという私の場合に関連しています。

于 2012-12-06T20:08:04.510 に答える