如何在Jquery中为新的Ajax元素绑定Overlay Tool?

时间:2009-11-03 01:04:41

标签: jquery ajax data-binding binding overlay

我正在使用:

echo $javascript->link('tools.overlay-1.0.4', false);

初始化为:

$(".overlay_popup").overlay({
    expose: '#000000',
    close: '.close_overlay',
    finish: {
        top: 'center',
        left: 'center',
        absolute: false
    }
});

我像这样调用叠加弹出框:

echo $html->link(
    "add part",
    array('controller'=>'garage_parts',
        'action'=>'addfrompartlist',
        $gcar['GarageCar']['id'],
        $gcar['GarageCar']['car_id']),
    array('class'=>'js-ajax overlay_popup',
        'id'=>'add_part_overlay',
        'rel'=>'.overlay_container')
);

这一切都很好用,但我有一个动态添加上面显示的“添加部分”超链接按钮的ajax函数,我不知道如何将这个新按钮绑定到覆盖图。通常,我会使用这样的东西:

$(".overlay_popup").bind("click", function(){...但这不适用于叠加层。关于如何成功做到这一点的任何想法?

5 个答案:

答案 0 :(得分:2)

尝试动态添加链接的另一件事,受Csongor启发:

var Overlay = $(".overlay_popup").data("overlay");
$(".overlay_popup").overlay(Overlay.getConf());

答案 1 :(得分:1)

为什么不在点击事件中使用API​​.load?

http://flowplayer.org/tools/overlay.html

var overlayDiv = $(".overlay_popup").overlay({expose: '#000000', close: '.close_overlay',   finish: { top: 'center', left: 'center', absolute: false }});

$(“。overlay_popup”)。bind(“click”,function(){overlayDiv.load();})

答案 2 :(得分:0)

使用jQuery live( type, fn ) method

$(".overlay_popup").live("click", function(){...})将您的处理程序绑定到所有当前匹配的元素,但也绑定到与您的选择器匹配的所有新元素。

答案 3 :(得分:0)

我有一个解决方案,抱歉我的英语不好......

这是解决方案:

在librarie tools.overlay-1.1.2.js中的

在函数overlay()之前添加下一个代码:

 $.fn.addObjectToOverlay = function(element, confOverlay){
  el = new Overlay($(element), confOverlay);
  instances.push(el);
  $(this).data("overlay", el);
 };

 // jQuery plugin initialization
 $.fn.overlay = function(conf) {  

然后你必须像这样调用这个函数

$('#avisoFav').remove();
$video = $(respuesta);
$video.css("display", "none");
$("#contenidoFav").append($video);
$.each($video.find('.linkRMTP'), function (index, obj){
 $video.addObjectToOverlay(obj, confOverlay);
});
$video.slideDown('fast');

变量“confOverlay”是我的叠加层的配置,例如:

confOverlay = { 
   effect: 'drop', 
   expose: '#789',
   top:25,
   closeOnClick : false,
   fastInSpeed : 'fast',
   onBeforeLoad: function(){
    idVideo = $(this.getTrigger()).attr("idVideo");
    idiomaActual = $(this.getTrigger()).attr("idiomaActual");
    onBeforeLoad(idVideo, idiomaActual);
   },
   onLoad: function(){
    $("#contenedorVideo > *").remove();
    url= $(this.getTrigger()).attr('link');
    onLoaded(url);
   },
   onClose: function (){
    $("#contenedorVideo > *").remove();
   }
  };

因此,您需要为叠加层执行的所有操作都可以实时处理新的创建元素。

ATTE。 萨尔瓦多罗梅罗

答案 4 :(得分:0)

对于迟到的答案,很抱歉使用此代码更改功能

$.fn.addObjectToOverlay = function(element, confOverlay){ 
    if ($.isFunction(confOverlay)) {
        conf = {onBeforeLoad: confOverlay}; 
    }

    var globals = $.extend({}, $.tools.overlay.conf); 
    confOverlay = $.extend(true, globals, confOverlay);
    el = new Overlay($(element), confOverlay);
    instances.push(el);
    $(this).data("overlay", el);
    return confOverlay.api ? el: this;
};