現在のモバイル プロジェクトでは、Brad Birdsall の Swipe.jsプラグインを、タッチ フレンドリーでライブラリに依存しないスライダー用のプラグインとして使用しています。ページの読み込み時にスライダーを設定すると、すべてがうまく機能します。ただし、スライダーを$.ajax()
クリックして入力しようとすると、スライダーはすべてのスライドを受け取りますが、タッチ イベントやスライダーに関連付けられたメソッドには反応しません。
一般的なスライダーの HTML 構造は次のようになります。
<div id="slider" class="swipe">
<ul>
<li style='display:block;'>
<img src="/someImageUrl.jpg" />
</li>
<li style='display:none;'>
<img src="/someImageUrl.jpg" />
</li>
</ul>
</div><!-- .swipe -->
<nav>
<a href="#" class="prev" onclick="slider.prev();return false;">PREV</a>
<a href="#" class="next" onclick="slider.next();return false;">NEXT</a>
</nav>
$.ajax()
応答を使用し<li><img src="..." /></li>
て、ドキュメントの on a click イベント ハンドラーを設定しています。
ここに私のJSがあります:
$.ajax({
url: "process.inc.php?vehicleId=" + vehicleId,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var swipeSlides = "";
for (i = 0 ; i < data.length; i++) {
var photoUrl = data[i].photoUrl;
var photoArray = photoUrl.split("|");
if (photoArray.length <= 1) {
list += "<img src="+photoArray[i]+" />"
} else {
for (i = 0; i < photoArray.length; i++) {
swipeSlides += "<li><img src='"+photoArray[i]+"' /></li>"
}
var prevNext = "<nav><a href=\"#\" class=\"prev\" onclick=\"slider.prev();return false;\">PREV</a><a href=\"#\" class=\"next\" onclick=\"slider.next();return false;\">NEXT</a></nav>"
var sliderElement = $(self).parent().find("#data #slider ul");
sliderElement.find("li, nav").remove();
sliderElement.append(swipeSlides, prevNext);
$.getScript('../assets/js/swipe.js');
var slider = new Swipe(
document.getElementById('slider')
);
};
};
} // end success function
}); // end AJAX
これにより、ページに必要なすべてのコンテンツが正常に読み込まれますが、前または次のプットンのいずれかをクリックすると、コンソールに次のエラーが表示されます。
Uncaught TypeError: Object #<HTMLCollection> has no method 'next'
これは、スクリプトがページに適切にロードされていないか、スライダーが適切なタイミングでインスタンス化されていないことを示しています。
$.getScript()
次のように、メソッド内でコードを実行しようとしました。
$.getScript('../assets/js/swipe.js', function(data, textStatus, jqxhr) {
for (i = 0; i < photoArray.length; i++) {
swipeSlides += "<li><img src='"+photoArray[i]+"' /></li>"
}
var prevNext = "<nav><a href=\"#\" class=\"prev\" onclick=\"slider.prev();return false;\">PREV</a><a href=\"#\" class=\"next\" onclick=\"slider.next();return false;\">NEXT</a></nav>"
var sliderElement = $(self).parent().find("#data #slider ul");
sliderElement.find("li, nav").remove();
sliderElement.append(swipeSlides, prevNext);
var slider = new Swipe(
document.getElementById('slider')
);
});
<script src="/assets/js/swipe.js"></script>
または、jQuery スクリプトを実行する前に古き良き方法を使用するだけでも、まったく同じエラーが発生し続けます。
誰かに提案があれば、私は永遠に感謝します。