webentwicklung-frage-antwort-db.com.de

Fehler in slick.js: "Uncaught TypeError: Eigenschaft 'add' von null kann nicht gelesen werden"

Ich habe Slick-Js für die Slider-Ansicht des Bildes verwendet.

Hier ist mein Code.

<div class="slider_wrap add-remove">
    <%= f.fields_for :images do |image_form| %>
      <%#= render 'images_fields', :f => image_form %>
        <div>
          <%= image_tag image_form.object.picture.url,:class=>"drop_down_link even img_prev" %>
        </div>
        <div class="image_upload_div">
          <div class="image-upload">
            <label>
              <i class="fa fa-cloud-upload">
                <%= image_form.file_field :picture ,:'data-role'=>"none",:onchange=>"readURL(this);" , :accept => 'image/jpeg , image/png' %>
              </i>
            </label>
          </div>
        </div>
    <% end %>
    <%= f.link_to_add "Add a picture", :images ,:id=>"add_pic" ,:class=>"js-add-slide", :style=>"display: none;"%>
</div>

<script>
function silder(){
    slideIndex = 0;
      $('.add-remove').slick({
        slidesToShow: 2,
        slidesToScroll: 2
      });
      $('.js-add-slide').on('click', function() {
        $('.add-remove').slick('slickAdd');
      });

      $('.js-remove-slide').on('click', function() {
        $('.add-remove').slick('slickRemove');
      });
});
function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onload = function (e) {
    $('.img_prev').last()
      .attr('src', e.target.result)
    };

    reader.readAsDataURL(input.files[0]);

    setTimeout(function(){
      $('#add_pic').trigger('click');
      silder();
    }, 100);
  }
}
</script>

Mit diesem Code habe ich Slider zum Laufen gebracht, aber es kommt nicht richtig. Ich erhalte die Fehlermeldung:

Nicht erfasster TypeError: Die Eigenschaft 'add' von null kann nicht gelesen werden

18
P_M

Das liegt an Aufruf von init zweimal . Das funktioniert ohne Fehler:

$(".slider").not('.slick-initialized').slick()

Auch "silder" sieht aus wie ein Tippfehler.

Ein Timeout ist auch fehleranfällig. Leider Internet Explorer verwendet ein anderes Ereignis, um Ihnen mitzuteilen, wann die HTML-Elemente und JS-Bibliotheken geladen wurden. Es gibt viele Bibliotheken, um die etwa 100 Zeilen browserübergreifenden Codes zu vermeiden, aber die beliebten und relativ kleine jQuery löst das Timing-Problem wie folgt:

$(function() {
  // Handler for .ready() called. Put the Slick Slider etc. init code here.
})
67
Cees Timmerman