如何在函数中引用“this”

时间:2016-05-09 17:48:10

标签: javascript jquery

我想验证几个输入字段。除焦点方法外,下面的代码工作正常。我希望它不能解释与表单上的输入位置相关的“输入”变量。问题:如何记录特定输入的位置,请记住有20多个输入? tks!

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>

1 个答案:

答案 0 :(得分:0)

我所做的是在这部分.find('quantity')中你可能意味着.find('input')作为之前的陈述,然后我发现你在那里使用相同的元素。因此,作为相同的元素,您不需要保持它的引用(在input var中)和它的值(quantity var)传递给{{ 1}}。由于这是一个函数,为什么不使用更少的代码并使函数处理它,对吧?因此,我已将其更改为仅传递元素引用并在函数内部使用此条件validateInput我可以检查元素是否为空,以及它是否为数字:

if ($input.val().length > 0 && isNaN($input.val()))

Demo

您已经完成的一个重要错误 - 您可能 - 在没有注意到的情况下 - 是您浏览元素树以查找输入,但是当您执行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); }); 时#39;事实上,在具有类$(".product_table").on('change', '.edit_quantity'的元素中使用类edit_quantity绑定所有元素中的事件,因此在事件中,您的product_table 已经输入,你不需要像我一样去追求它:

this

我希望这会有所帮助。