在插件中使用$(this).each不能正常运行jquery

时间:2013-07-25 19:31:43

标签: jquery

我有这个简单的插件,但是$(this).each()不起作用,它只为$("input.[class~='checking']")的每个选择器调用一次而不是onve,因此我想为每个输入调用一次有一类“检查”的盒子,我完全迷失了为什么它不起作用

(function ($) {
    moSHclass = ''
    $.fn.isCheckedMO = function (moSHclass) {
        $("input.[class~='" + moSHclass + "']").hide();


        $(this).click(function () {
            var amChecked = 0

            $(this).each(function () {

                if (this.checked == true) {
                    alert('am:' + amChecked)
                    amChecked = amChecked + 1
                }
            });
            if (amChecked > 0) {

                $("input.[class~='" + moSHclass + "']").show();
            } else {
                $("input.[class~='" + moSHclass + "']").hide();
            }
        });
    }
})(jQuery);

3 个答案:

答案 0 :(得分:1)

这是通过以下方式解决的,我得到了很多回复,我很感激,希望我将$(this)分配给变量,然后在每个变量中使用该变量而不是$(this)( ) 跑。然而,有效的是这样做,然后把变量放在$(mySelector)的parantheses而不是整个部分。

(function($) {
moSHclass=''

$.fn.isCheckedMO=function(moSHclass) {
 $("input.[class~='"+moSHclass+"']").hide(); 

  $("td.[class~='"+moHTML+"']").addClass('red')


 var mySelector=$(this)
  $(this).click(function(){ 

var amChecked=0

    $(mySelector).each(function(){

  if (this.checked==true) { 

   amChecked=amChecked+1}
  });
if (amChecked>0) 
 {

 $("input.[class~='"+moSHclass+"']").show();
  }else { 
 $("input.[class~='"+moSHclass+"']").hide(); 
  }
 });
}

答案 1 :(得分:0)

我愿意打赌你试图在错误的each上访问this。尝试:

(function ($) {
    moSHclass = ''
    $.fn.isCheckedMO = function (moSHclass) {
        var whatIThinkYouWantThisToBe = $("input.[class~='" + moSHclass + "']");
        whatIThinkYouWantThisToBe.hide(); 
        whatIThinkYouWantThisToBe.click(function () {
            var amChecked = 0
            //Store $(this) in $that for use within each callback...
            var $that = $(this);
            $that.each(function () {
                if (this.checked == true) {
                    alert('am:' + amChecked)
                    amChecked = amChecked + 1
                }
            });
            if (amChecked > 0) {

                $("input.[class~='" + moSHclass + "']").show();
            } else {
                $("input.[class~='" + moSHclass + "']").hide();
            }
        });
    }
})(jQuery);

答案 2 :(得分:0)

你为什么不这样做

$("input.[class~='checking']").each(...

insted of

$(this).each(...

Aditionaly你可以在控制台中调试,用

查看那个时候$(this)是什么
console.log( $(this) );

你可以通过这种方式将$(this)保存到:

(function ($) {
moSHclass = ''
$.fn.isCheckedMO = function (moSHclass) {
    var $self = $(this);
    $("input.[class~='" + moSHclass + "']").hide();


    $(this).click(function () {
        var amChecked = 0

        $self.each(function () {

            if (this.checked == true) {
                alert('am:' + amChecked)
                amChecked = amChecked + 1
            }
        });
        if (amChecked > 0) {

            $("input.[class~='" + moSHclass + "']").show();
        } else {
            $("input.[class~='" + moSHclass + "']").hide();
        }
    });
}
})(jQuery);