2016-05-09 13 views
-1

いくつかの入力フィールドを検証したいと思います。以下のコードはフォーカスメソッドを除いて正常に動作します。私はフォーム上の入力場所に関連する "入力"変数を解釈できないことを期待しています。質問:20以上の入力があることを念頭に置いて、特定の入力の場所をどのように参照するのですか? tks!"this"を関数で参照する方法

function validateInput(quantity,input) 
{ 
    if (quantity.value !== " ") { 
     if(isNaN(quantity)) {           
      $(".myerror_alert").append('<div class="alert alert-danger"><strong>Warning!</strong> You have entered an non valid character, go back and enter a real number </div>'); 
      input.focus(); // THIS DOES NOT WORK 
      return false; 
     } 
    } 
    return true; 
} 

$(".product_table").on('change', '.edit_quantity',function(){ 

    var quantity = $(this).parents(':eq(1)').find('input').filter(".edit_quantity").val(); 
    var input = $(this).parents(':eq(1)').find('quantity').filter(".edit_quantity"); 


    validateInput(quantity, input); 

// MORE CODE GOES HERE // 

}); 

HTML:

   <tr class='delete_row'> 
        <td><input class="product_id form-control" readonly="readonly" name="product_id[0]" type="text" value="123"></td> 
        <td><input class="edit_product_id form-control" readonly="readonly" name="product_id[0]" type="text" value="Euroshake Blackstone"></td> 
        <td><input class="edit_quantity" name="product_id[0]" type="text" value="120"></td> 
        <td id="price"><input class="unit_price form-control" readonly="readonly" style="text-align:right;" name="price" type="text" value="120.00"></td> 
        <td><input class="line_cost form-control" readonly="readonly" style="text-align:right;" name="cost" type="text" value="14400.00"></td> 
        <td> 
         <span style="padding-left:12px;"><input name="delete" type="checkbox" value="123"></span> 
        </td> 
       </tr> 
+0

あなたのHTMLも共有できますか? – LinkinTED

+2

'validateInput'を呼び出す場所を表示しないので、パラメータとして渡すものがわかりません。 'input'がjqueryオブジェクトの場合にはうまくいくはずです – dan08

+1

あなたは' $(input).focus() 'を試しましたか?また、 'validateInput'と呼ぶところにhtmlを入れてください。 –

答えて

0

私はこの部分.find('quantity')にあなたはおそらくその前の文と.find('input')を意味していることsuposeた何をしたか、そして、私はあなたがそこに同じ要素を使用していたことを把握。だから、同じ要素であるため、参照番号(input var)を保持する必要はなく、に渡す値(quantity var)です。これは関数なので、少ないコードで作業して関数がそれを処理するようにしましょう。だから私は、唯一の要素の参照を渡すためにそれを変更した要素が空ins'tともあれば、それは数ではない場合、この条件if ($input.val().length > 0 && isNaN($input.val()))持つ関数の内部で私がチェックすることができ:

function validateInput(input) 
{ 
    var $input = $(input); 

    if ($input.val().length > 0 && isNaN($input.val())) { 
     $(".myerror_alert").append('<div class="alert alert-danger"><strong>Warning!</strong> You have entered an non valid character, go back and enter a real number </div>'); 
     input.focus(); 
     return false; 
    } 
    return true; 
} 

$(".product_table").on('change', '.edit_quantity',function(){ 
    validateInput(this); 
}); 

Demo

重要な間違いの1つは、あなたが回避策を講じていることです。恐らく気付かずに、要素ツリーをナビゲートして入力を見つけることですが、$(".product_table").on('change', '.edit_quantity'を実行すると、実際にはすべての要素クラスedit_quantityがクラスproduct_tableの要素内にあるため、イベントの内部では、thisはすでに入力されている私が行ったように、あなたは、それの後に行く必要はありません。

validateInput(this); 

私はこのことができます願っています。

+1

優れたトップクラス!どうもありがとう – Vince

関連する問題