2013-05-12 184 views
6

例如,在使用AJAX之後,我將有一個可滾動的DIV。如何將滾動事件綁定到它?綁定滾動事件到動態DIV?

我已經試過:

$(window).on("scroll", ".mydiv", function(){...}) 
$(document).on("scroll", ".mydiv", function(){...}) 
$(".mydiv").on("scroll", function(){...}) 
$(".mydiv").scroll(function(){...}) 

但他們沒有工作。

DEMO

+0

你能舉個實際的例子嗎? – user568109 2013-05-12 07:49:46

+0

您在這裏: http://luanxt.tk/Demo/testing.htm – InOrderToLive 2013-05-12 09:06:14

+0

您在代碼中完全沒有使用ajax。 – moonwave99 2013-05-13 10:14:56

回答

-3

元素必須在文件存在使用jquey.on前()。

可以插入虛擬<div class="mydiv"></div>您使用jquery.on()

$('body').append('<div class="mydiv" style="display:none"></div>'); 
$(document).on("scroll", ".mydiv", function(){...}) 
+0

你確定嗎?我不同意這一點。當使用$(document).on(event,selector,function(){...})選擇器不需要存在。文檔將在出現時綁定它。你打破了功能。作爲你的例子,爲什麼我們不使用:$(「。mydiv」).roll(function(){...})? – InOrderToLive 2013-05-12 09:18:41

1

試試這個從您的代碼修改

http://jsfiddle.net/apDBE/

$(document).ready(function(){ 

    // Trigger 
    $("#btn").click(function(){ 
     if ($(".myDiv").length == 0) // Append once 
     $("body").append('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>'); 
    }); 

    // Not working 
    $(".myDiv").scroll(function(){ 
     alert("A"); 
    }); 

    // Not working 
    $(document).on("scroll", ".myDiv", function(){ 
     alert("A"); 
    }); 
}); 

希望這有助於之前

+0

我不確定你爲什麼把第一次嘗試標記爲「不工作」,但我已經更新了你的小提琴,它似乎工作:[更新的小提琴](http://jsfiddle.net/rkLta3jg/1/),我在撰寫本文時,已經在Safari,Chrome和Firefox的最新版本中對此進行了測試。 – olger 2015-09-18 08:35:15

0

http://jsfiddle.net/hainawa/cruut/

$(document).ready(function(){ 
    var $mydiv = $('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>'); 

    // It will work 
    $mydiv.scroll(function(){ 
     alert("A"); 
    }); 

    // Trigger 
    $("#btn").click(function(){ 
     //You are using the method append,so you don't need judge if div.mydiv exits. 
     //You'll need do this if you're using display:none 
     $("body").append($mydiv); 
    }); 
}); 
-1

應指定具有溢出您的DIV的高度等於自動:

.myDiv{ 
    height: 90px; 
    overflow: auto; 
} 
2

我有同樣的問題,我已經找到了jQuery .on() API如下:

在所有瀏覽器中,加載,滾動和錯誤事件(例如,元素上)不會冒泡。在Internet Explorer 8及更低版本中,粘貼和重置事件不會冒泡。此類事件不支持與委派一起使用,但可以在事件處理程序直接附加到生成事件的元素時使用它們。

因此不幸的是,這似乎不可能。

3

我只是振興這個老問題,因爲我沒有找到好的答案,我掙扎着自己尋找更好的方式來傾聽動態附加元素的「滾動」事件。

由於Scroll事件不會在DOM中冒泡,因此我們不能像on()那樣使用滾動。所以我想出了聽我自己的自定義觸發事件在我想要聽'滾動'事件的元素。

將元素附加在DOM上後,觸發自己的自定義事件後,滾動事件綁定。

$("body").on("custom-scroll", ".myDiv", function(){ 
 
    console.log("Scrolled :P"); 
 
}) 
 

 
$("#btn").on("click", function(){ 
 
    $("body").append('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>'); 
 
    listenForScrollEvent($(".myDiv")); 
 
}); 
 

 

 
function listenForScrollEvent(el){ 
 
    el.on("scroll", function(){ 
 
     el.trigger("custom-scroll"); 
 
    }) 
 
}
body{ font-family: tahoma; font-size: 12px; } 
 
\t 
 
\t .myDiv{ 
 
\t \t height: 90px; 
 
\t \t width: 300px; 
 
\t \t border: 1px solid; 
 
\t \t background-color: lavender; 
 
\t \t overflow: auto; 
 
\t }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type="button" id="btn" value="Click"/>

+0

謝謝,這應該標註爲解決方案 – vipin8169 2016-01-29 04:27:32

+0

這是解決方案,非常感謝。 – 2017-09-25 21:32:24

0

它是通過直接連接on工作,檢查例如波紋管。

希望這會有所幫助。

$("body").append('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>'); 
 

 
$(".myDiv").on("scroll", function(){ 
 
    \t console.log("scrolling"); 
 
}); \t
\t body{ font-family: tahoma; font-size: 12px; } 
 
\t 
 
\t .myDiv{ 
 
\t \t height: 90px; 
 
\t \t width: 300px; 
 
\t \t border: 1px solid; 
 
\t \t background-color: lavender; 
 
\t \t overflow: auto; 
 
\t }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

在我的應用程序,我有一個按鈕,每一個按鈕被點擊時附加形式的fieldsets的身體 - 我想滾動頁面到新的元素,但沒沒有明顯的原因(冒泡等)。我想出了一個簡單的解決...

function scroll(pixels){ 
    $('html, body').animate({ 
     scrollTop: pixels 
    }, 1000); 
}; 

function addObservation(x){ 
    $('body').append(x); 
    newFieldSet = $('fieldset').last(); 
    pixelsFromTop = newFieldSet.offset().top; 
    scroll(pixelsFromTop); 
}; 

$(document).on("click", "#add_observation", function(){ 
    addObservation("<fieldset>SOME FORM FIELDS HERE</fieldset>"); 
}); 

所以每次添加一個字段時,發現jQuery的最後一個。接着,添加.offset().top措施的字段集多少像素從頂部,然後滾動窗口距離。