2009-07-09 8 views
0

jQuery로 Ajax 호출을 시도했습니다. 그렇게 할 때 jQuery 모서리와 스크롤 기능이 작동하지 않습니다. 그러나 Ajax 호출 없이도 동일한 기능을 사용할 수 있습니다. 누구나이 솔루션을 제공 할 수 있습니까?jQuery가 Ajax 호출에서 작동하지 않습니다. 스크롤이 작동하지 않습니다.

내 응용 프로그램이 Ruby on Rails에 있고 ROR의 내 Ajax 호출이 다음과 같습니다.

(link_to_remote "tabname",:url=>{:controller=>'',:action=>''},:update=>'div to be updated') 

그리고 내 부분 (파일) 사업부에 업데이트 될 때, 내 jQuery를 모서리, CSS 및 모션 스크롤 막대를 놓친 거지.

내 jQuery 파일을 (Ajax 요청을 작성한 곳에서) 메인 페이지에 포함 시켰으며 jQuery 코너 파일은 jQuery 코너 플러그인의 최신 버전입니다. 다음은 jQuery 코너 파일입니다.

(function($) { 

var expr = (function() { 
    var div = document.createElement('div'); 
    try { div.style.setExpression('width','0+0'); } 
    catch(e) { return false; } 
    return true; 
})(); 

function sz(el, p) { 
    return parseInt($.css(el,p))||0; 
}; 
function hex2(s) { 
    var s = parseInt(s).toString(16); 
    return (s.length < 2) ? '0'+s : s; 
}; 

function gpc(node) { 
    for (; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode) { 
     var v = $.css(node,'backgroundColor'); 
     if (v.indexOf('rgb') >= 0) { 
      if ($.browser.safari && v == 'rgba(0, 0, 0, 0)') 
       continue; 
      var rgb = v.match(/\d+/g); 
      return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]); 
     } 
     if (v && v != 'transparent') 
      return v; 
    } 
    return '#ffffff'; 
}; 

function getWidth(fx, i, width) { 
    switch(fx) { 
    case 'round': return Math.round(width*(1-Math.cos(Math.asin(i/width)))); 
    case 'cool': return Math.round(width*(1+Math.cos(Math.asin(i/width)))); 
    case 'sharp': return Math.round(width*(1-Math.cos(Math.acos(i/width)))); 
    case 'bite': return Math.round(width*(Math.cos(Math.asin((width-i-1)/width)))); 
    case 'slide': return Math.round(width*(Math.atan2(i,width/i))); 
    case 'jut': return Math.round(width*(Math.atan2(width,(width-i-1)))); 
    case 'curl': return Math.round(width*(Math.atan(i))); 
    case 'tear': return Math.round(width*(Math.cos(i))); 
    case 'wicked': return Math.round(width*(Math.tan(i))); 
    case 'long': return Math.round(width*(Math.sqrt(i))); 
    case 'sculpt': return Math.round(width*(Math.log((width-i-1),width))); 
    case 'dog': return (i&1) ? (i+1) : width; 
    case 'dog2': return (i&2) ? (i+1) : width; 
    case 'dog3': return (i&3) ? (i+1) : width; 
    case 'fray': return (i%2)*width; 
    case 'notch': return width; 
    case 'bevel': return i+1; 
    } 
}; 

$.fn.corner = function(o) { 
    // in 1.3+ we can fix mistakes with the ready state 
    if (this.length == 0) { 
     if (!$.isReady && this.selector) { 
      var s = this.selector, c = this.context; 
      $(function() { 
       $(s,c).corner(o); 
      }); 
     } 
     return this; 
    } 

    o = (o||"").toLowerCase(); 
    var keep = /keep/.test(o);      // keep borders? 
    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]); // corner color 
    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]); // strip color 
    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width 
    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/; 
    var fx = ((o.match(re)||['round'])[0]); 
    var edges = { T:0, B:1 }; 
    var opts = { 
     TL: /top|tl/.test(o),  TR: /top|tr/.test(o), 
     BL: /bottom|bl/.test(o), BR: /bottom|br/.test(o) 
    }; 
    if (!opts.TL && !opts.TR && !opts.BL && !opts.BR) 
     opts = { TL:1, TR:1, BL:1, BR:1 }; 
    var strip = document.createElement('div'); 
    strip.style.overflow = 'hidden'; 
    strip.style.height = '1px'; 
    strip.style.backgroundColor = sc || 'transparent'; 
    strip.style.borderStyle = 'solid'; 
    return this.each(function(index){ 
     var pad = { 
      T: parseInt($.css(this,'paddingTop'))||0,  R: parseInt($.css(this,'paddingRight'))||0, 
      B: parseInt($.css(this,'paddingBottom'))||0, L: parseInt($.css(this,'paddingLeft'))||0 
     }; 

     if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE 
     if (!keep) this.style.border = 'none'; 
     strip.style.borderColor = cc || gpc(this.parentNode); 
     var cssHeight = $.curCSS(this, 'height'); 

     for (var j in edges) { 
      var bot = edges[j]; 
      // only add stips if needed 
      if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) { 
       strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none'); 
       var d = document.createElement('div'); 
       $(d).addClass('jquery-corner'); 
       var ds = d.style; 

       bot ? This.appendChild(d) : this.insertBefore(d, this.firstChild); 

       if (bot && cssHeight != 'auto') { 
        if ($.css(this,'position') == 'static') 
         this.style.position = 'relative'; 
        ds.position = 'absolute'; 
        ds.bottom = ds.left = ds.padding = ds.margin = '0'; 
        if (expr) 
         ds.setExpression('width', 'this.parentNode.offsetWidth'); 
        else 
         ds.width = '100%'; 
       } 
       else if (!bot && $.browser.msie) { 
        if ($.css(this,'position') == 'static') 
         this.style.position = 'relative'; 
        ds.position = 'absolute'; 
        ds.top = ds.left = ds.right = ds.padding = ds.margin = '0'; 

        // fix ie6 problem when blocked element has a border width 
        if (expr) { 
         var bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth'); 
         ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"'); 
        } 
        else 
         ds.width = '100%'; 
       } 
       else { 
        ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
             (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';     
       } 

       for (var i=0; i < width; i++) { 
        var w = Math.max(0,getWidth(fx,i, width)); 
        var e = strip.cloneNode(false); 
        e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px'; 
        bot ? D.appendChild(e) : d.insertBefore(e, d.firstChild); 
       } 
      } 
     } 
    }); 
}; 

jQuery.fn.uncorner = function() { return jQuery('.jquery-corner', this).remove(); }; 

})(jQuery); 
+0

코드를 좀 더 형식화 할 수 있습니까? – scheibk

답변

0

당신은 $ ("#의 updated_element")을 호출해야합니다. 다시 한 번 모서리를(), 요소는 DOM 준비 후로드 된 때문이다.

관련 문제