Jquery Live Function

时间:2010-05-28 11:53:46

标签: jquery html function live

我想让这个脚本作为LIVE()函数运行。 请帮帮我!

 $(".img img").each(function() {
    $(this).cjObjectScaler({
   destElem: $(this).parent(),
      method: "fit"
    });
 });

cjObjectScaler脚本(在html标题中调用)是:(感谢Doug Jones)

(function ($) {
 jQuery.fn.imagesLoaded = function (callback) {
  var elems = this.filter('img'),
   len = elems.length;
  elems.bind('load', function () {
   if (--len <= 0) {
    callback.call(elems, this);
   }
  }).each(function () {
   // cached images don't fire load sometimes, so we reset src.
   if (this.complete || this.complete === undefined) {
    var src = this.src;
    // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
    this.src = '#';
    this.src = src;
   }
  });
 };
})(jQuery);

/*
 CJ Object Scaler
*/
(function ($) {
 jQuery.fn.cjObjectScaler = function (options) {

  /* 
   user variables (settings)
  ***************************************/
  var settings = {
   // must be a jQuery object
   method: "fill",
   // the parent object to scale our object into
   destElem: null,
   // fit|fill
   fade: 0 // if positive value, do hide/fadeIn
  };

  /* 
   system variables
  ***************************************/
  var sys = {
   // function parameters
   version: '2.1.1',
   elem: null
  };

  /* 
   scale the image
  ***************************************/

  function scaleObj(obj) {

   // declare some local variables
   var destW = jQuery(settings.destElem).width(),
    destH = jQuery(settings.destElem).height(),
    ratioX, ratioY, scale, newWidth, newHeight, 
    borderW = parseInt(jQuery(obj).css("borderLeftWidth"), 10) + parseInt(jQuery(obj).css("borderRightWidth"), 10),
    borderH = parseInt(jQuery(obj).css("borderTopWidth"), 10) + parseInt(jQuery(obj).css("borderBottomWidth"), 10),
    objW = jQuery(obj).width(),
    objH = jQuery(obj).height();

   // check for valid border values. IE takes in account border size when calculating width/height so just set to 0
   borderW = isNaN(borderW) ? 0 : borderW;
   borderH = isNaN(borderH) ? 0 : borderH;

   // calculate scale ratios
   ratioX = destW / jQuery(obj).width();
   ratioY = destH / jQuery(obj).height();

   // Determine which algorithm to use
   if (!jQuery(obj).hasClass("cf_image_scaler_fill") && (jQuery(obj).hasClass("cf_image_scaler_fit") || settings.method === "fit")) {
    scale = ratioX < ratioY ? ratioX : ratioY;
   } else if (!jQuery(obj).hasClass("cf_image_scaler_fit") && (jQuery(obj).hasClass("cf_image_scaler_fill") || settings.method === "fill")) {
    scale = ratioX < ratioY ? ratioX : ratioY;
   }

   // calculate our new image dimensions
   newWidth = parseInt(jQuery(obj).width() * scale, 10) - borderW;
   newHeight = parseInt(jQuery(obj).height() * scale, 10) - borderH;

   // Set new dimensions & offset
   jQuery(obj).css({
    "width": newWidth + "px",
    "height": newHeight + "px"//,
   // "position": "absolute",
//    "top": (parseInt((destH - newHeight) / 2, 10) - parseInt(borderH / 2, 10)) + "px",
//    "left": (parseInt((destW - newWidth) / 2, 10) - parseInt(borderW / 2, 10)) + "px"
   }).attr({
    "width": newWidth,
    "height": newHeight
   });

   // do our fancy fade in, if user supplied a fade amount
   if (settings.fade > 0) {
    jQuery(obj).fadeIn(settings.fade);
   }

  }

  /* 
   set up any user passed variables
  ***************************************/
  if (options) {
   jQuery.extend(settings, options);
  }

  /* 
   main
  ***************************************/
  return this.each(function () {

   sys.elem = this;

   // if they don't provide a destObject, use parent
   if (settings.destElem === null) {

    settings.destElem = jQuery(sys.elem).parent();
   }

   // need to make sure the user set the parent's position. Things go bonker's if not set.
   // valid values: absolute|relative|fixed
   if (jQuery(settings.destElem).css("position") === "static") {
    jQuery(settings.destElem).css({
     "position": "relative"
    });
   }

   // if our object to scale is an image, we need to make sure it's loaded before we continue.
   if (typeof sys.elem === "object" && typeof settings.destElem === "object" && typeof settings.method === "string") {

    // if the user supplied a fade amount, hide our image
    if (settings.fade > 0) {
     jQuery(sys.elem).hide();
    }

    if (sys.elem.nodeName === "IMG") {

     // to fix the weird width/height caching issue we set the image dimensions to be auto;
     jQuery(sys.elem).width("auto");
     jQuery(sys.elem).height("auto");

     // wait until the image is loaded before scaling
     jQuery(sys.elem).imagesLoaded(function () {
      scaleObj(this);
     });

    } else {

     scaleObj(jQuery(sys.elem));
    }

   } else {

    console.debug("CJ Object Scaler could not initialize.");
    return;

   }

  });

 };
})(jQuery);

1 个答案:

答案 0 :(得分:2)

.live()不起作用,您需要在需要时再次激活该功能,例如在您的$.ajax() successcomplete回调中,.ajaxSuccess().ajaxComplete()中,或使用.livequery() plugin

.live()侦听要冒泡的事件...添加新元素时没有任何交互,因此它不适合插件,至少不是基于事件触发的插件。< / p>