有没有办法不重复这段代码?

时间:2015-09-01 14:56:52

标签: javascript

我正在制作一个计数按钮,但问题是因为我重复相同的代码至少是制作代码巨人的100倍,是否有一种方法不为不同的按钮重复一百次? / p>

$('#rcleric21').click( function() {
    counter11 = $('#rankcleric11').val();
    if (counter11 > 0) {
       counter11--;
       total[3]++;
       totalranktres--;
       $('#rankcleric11').val(counter11);
       $('.skillpoints3').val(total[3]);
    }
});
$('#rcleric22').click( function() {
     counter11 = $('#rankcleric11').val();
     if (counter11 < 5 && totalranktres <15){
         counter11++ ;
         total[3]--;
         totalranktres++;
         $('#rankcleric11').val(counter11);
         $('.skillpoints3').val(total[3]);
    }                   
});

2 个答案:

答案 0 :(得分:1)

你可以创建一个函数,例如

function doSomething(e) {
    console.log('Do Something');
}

$('#someId').click(doSomething);
$('#someId2').click(doSomething);

这样您就不需要重复单击回调(doSomething函数)中执行的代码。显然你应该调整内部代码以便更通用,因此它可以根据情况做任何你需要的事情(选择器可以改变很难等)。

如果你需要对很多元素执行这个操作,应该考虑为它添加一个类(不需要遍历所有元素来附加回调)。

你的代码应该是......

function doSomething(e) {
   var elem = $(e.currentTarget);
   console.log(elem);

   //Apply your logic here based on the element here.
}
$('.clickToDoSomething').click(doSomething);

答案 1 :(得分:1)

您需要创建一个命名函数,并且还需要传入确定结果的参数。像这样:

function updateThings(arg1, arg2, arg3) {

    var firstComparison = eval(arg1);
    var secondComparison = eval(arg2);

    counter11 = $('#rankcleric11').val();

    if (firstComparison && secondComparison) {
        arg3 ? counter++ : counter11--;
        total[3]++;
        arg3 ? totalranktres++ : totalranktres--;
        $('#rankcleric11').val(counter11);
        $('.skillpoints3').val(total[3]);
    }
}

$('#rcleric21').click( function() {
    updateThings('counter11 > 0', true, true);
});

$('#rcleric22').click( function() {
    updateThings('counter11 < 5', 'totalranktres < 15', false);
});

请注意,我对eval()方法没有经验,可能需要进行调整才能正确处理参数。

正如其他人所说,一个普通的类比定位ID更好。您可以在数据属性中包含比较字符串。这看起来像这样:

<div class="myClickyClass" data-arg1="counter11 > 0" ...> ... </div>

$('.myClickyClass').click( function() {
    var arg1 = $(this).attr('data-arg1');
    var arg2 = $(this).attr('data-arg2');
    var arg3 = $(this).attr('data-arg3');

    updateThings(arg1, arg2, arg3);
});