2013-07-09 46 views
0

我試圖建立一個自定義date.js功能(與引導配對)將每個輸入迴應...jQuery的自定義函數W/date.js

我的功能工作的第一個項目在系列字段如果我說$(".date-js").changeIt();,但只有第一個。

$.fn.changeIt = function() { 
    var input = "input#" + $(this).attr('id'); 
    input = $(input).data('val', $(input).val()); // save value 
    $(input).change(function() { // works when input will be blured and the value was changed 
     date = Date.parse(input.val()); 

     if (date !== null) { 
      input.removeClass(); 
      input.parent().removeClass("error success"); 
      input.parent().addClass("success"); 
      input.addClass("success"); 
     } else { 
      input.removeClass(); 
      input.parent().removeClass("error success"); 
      input.addClass("field_with_errors"); 
      input.parent().addClass("error"); 
     } 
    }); 

    $(input).keyup(function() { // works immediately when user press button inside of the input 
     if ($(input).val() != $(input).data('val')) { // check if value changed 
      $(input).data('val', $(input).val()); // save new value 
      $(this).change(); // simulate "change" event 
     } 
    }); 
} 

= form_for [@tool, @calibration] do |f| 
    #errors 
    .form-container 
    -if @tool.status == "In" 
     %p Enter time taken for calibration 
     .field.control-group 
     = f.label :ats_in 
     = f.text_field :ats_in, :class => "date-js" 
    -if @tool.status == "Out" 
     %p Enter time returned 
     .field.control-group 
     = f.label :cal_date 
     = f.text_field :cal_date, :class => "date-js" 
     .field.control-group 
     = f.label :cal_date_due 
     = f.text_field :cal_date_due, :class => "date-js" 
     .field.control-group 
     = f.label :ats_out 
     = f.text_field :ats_out, :class => "date-js" 
    .clear 
    = f.submit 'Save', :disable_with => "Saving..." 
+0

請爲輸入添加'HTML'標記 –

回答

0

將您的插件代碼包裝在return this.each(function() { });中,那麼它將應用於所有匹配的元素。更新代碼:

$.fn.changeIt = function() { 
    return this.each(function() { 
     var input = "input#" + $(this).attr('id'); 
     input = $(input).data('val', $(input).val()); // save value 
     $(input).change(function() { // works when input will be blured and the value was changed 
      date = Date.parse(input.val()); 
      if (date !== null) { 
       input.removeClass(); 
       input.parent().removeClass("error success"); 
       input.parent().addClass("success"); 
       input.addClass("success"); 
      } else { 
       input.removeClass(); 
       input.parent().removeClass("error success"); 
       input.addClass("field_with_errors"); 
       input.parent().addClass("error"); 
      } 
     }); 

     $(input).keyup(function() { // works immediately when user press button inside of the input 
      if ($(input).val() != $(input).data('val')) { // check if value changed 
       $(input).data('val', $(input).val()); // save new value 
       $(this).change(); // simulate "change" event 
      } 
     }); 
    }); 
} 
+0

您能否解釋爲什麼會出現這種情況?我不是jQuery/jscript的專家... –

+0

因爲'$(「。date-js」)'將返回一個元素數組,您需要使用'each'來迭代它,更多信息請訪問http:/ /stackoverflow.com/questions/2678185/why-return-this-eachfunction-in-jquery-plugins –