2010-03-12 90 views
1

我可以创建一个事件,以便每当具有特定ID的元素变为可见或出现在页面上时,我可以执行一些JavaScript?将事件绑定到div出现

元素来自远程资源(所以不是在我的html代码中,但出现在页面加载),我想要一些代码运行时出现(只有它出现时,它可能不会出现每加载)。

谢谢!

+0

你可以更具体地了解如何将该片段投放到页面中吗?你用ajax加载它还是加载到iframe或其他方式? – 2010-03-12 10:47:00

+0

@Marko Dumic它由外部JavaScript web服务(Microsoft的翻译AJAX API)加载。 如果您曾经使用过它,它会在页面顶部创建一个工具栏,但只会在您调用Web服务时插入它。 :) – AndrewC 2010-03-12 11:36:45

回答

1

您可以将检查每X毫秒,如果这样的元素出现在页面(一个纯JavaScript解决方案)上的功能:

(​function()​ { 
    var intervalId = window.setInterval(function() { 
     if (null != document.getElementById('myDivId')) { 
      // the div appeared on the page 
      // ... do your stuff here: 
      alert('its here!'); 

      // optionally stop checking (obviously it's there already 
      // unless you decide to remove it) 
      window.clearInterval(intervalId); 
     }; 
    }, 100); // perform check every 100 milliseconds 
}​)()​; 

存在这样的可能性,该DIV是那里所有的时间,只不可见。所以,你的检查功能应该是有一点不同:

var el = document.getElementById('myDivId'); 
if (null != el && (el.offsetWidth > 0 || el.offsetHeight > 0)) { 

基本上(el.offsetWidth > 0 || el.offsetHeight > 0)表示该元件不被其或其父母的CSS属性是隐藏的。

+0

拨弄它在这里:http://jsfiddle.net/xS63J/ – 2010-03-12 12:16:44

+0

谢谢,我很好奇如何资源密集,它会执行这每100毫秒?我想这将是不可知的,但只是仔细检查:) – AndrewC 2010-03-12 13:44:18

+0

根据我的经验不明显。另外,我通过本地生成光,没有jQuery等。 – 2010-03-12 14:22:38

1

如果选择没有找到匹配,它只是将无法运行,所以像这样仅仅有代码是罚款:

$("#elementID").each(function() { 
    //do something 
}); 

只要运行在任何代码加载ID的发言,或者钻机它在阿贾克斯处理程序,如果这就是它是如何得到加载这样的:

$.ajaxSetup({ 
    complete: function() { 
    $("#elementID").each(function() { 
    //do something 
    }); 
    }  
}); 
1

你可以使用live()方法:

$('div_id_or_class').live('click', function(){ 
// ................ 
}); 
+2

'click'不是与页面上显示或正在加载的内容相关的事件。 – 2010-03-12 10:45:39

+0

@Marko:谢谢你的提问。 :) – Sarfraz 2010-03-12 11:25:28