2013-07-25 3 views
0

У меня есть этот простой плагин, но $(this).each() не работает, он вызывает только один раз вместо onve для каждого из селекторов, который равен $("input.[class~='checking']"), поэтому в bascailly я хочу позвонить каждый раз для каждого ввода с классом «проверки» и я полностью потерял, почему он не работает

(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); 
+2

'вернуть this.each (функция() {$ вар это = $ (это)? $ This.click (функция() {' – Ohgodwhy

+0

я не уверен, что вы имеете в виду здесь –

+1

shudnt что be '$ (" input [class ~ = 'проверка'] ")'? без '.'? – krishgopinath

ответ

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); 
+0

это работает одинаково, оно дает только одно предупреждение, даже если проверено два или более –

+0

См. мое редактирование, похоже первая ссылка на 'this' - это не то, что вы думаете, это должно быть. То же самое, что вы пытаетесь скрыть? – marteljn

+0

кнопка щелчка работает очень хорошо, и я не хочу, чтобы класс использовался, чтобы скрыть или показать, что я хочу использовать селектор для плагина в качестве селектора для каждого из них() –

0

почему вам не сделать

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

InstEd из

$(this).each(... 

?

Aditionaly вы можете отлаживать в консоли, посмотрим, что $ (это) в этой точке с

console.log($(this)); 

Вы culd сэкономить $ (это) этот способ:

(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); 
+0

, потому что, если бы я сделал это, я мог бы также поместить его в весь po int должен предоставить конечному пользователю возможность использовать любой класс, который им нужен. –

+0

Затем возьмите класс в качестве опции, а затем используйте его или просто сделайте shure, вы выбрали правильный объект и сохраните его в var, do de .each(). Обычно встречается нечто вроде var $ self = $ (this) в первой строке. –

+0

Я мог бы это сделать, но я бы предпочел получить эту работу, это не делает, поскольку я не могу использовать селектор в каждом() –

1

это была решена ниже, я получал много ответов, которые я высоко оценил, что хотел, чтобы я присвоил переменную $ (this) переменной, а затем использовал эту переменную вместо $ (this) в каждом() запуске. Однако то, что работало, делало это, а затем помещало эту переменную внутри $ (mySelector) в скобки, а не внутри всего раздела.

(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(); 
    } 
}); 
} 
Смежные вопросы