Конфликт javascript или неразрешимая проблема?

Discussion in 'PHP' started by andrbaks, 15 Jan 2012.

  1. andrbaks

    andrbaks New Member

    Joined:
    25 Oct 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    В чем подвох? Использую скрипт для загрузки данных без перезагрузки основной страницы.

    PHP:
    function loadContent(link) {

    var 
    cont document.getElementById('contentDiv');
    var 
    loading document.getElementById('loading');

    cont.innerHTML loading.innerHTML;

    var 
    http createRequestObject();// Создаём объект для связи с сервером
        
    http.caching false//кешируем или не кешируем загружаемую инфу
        
    if (http.overrideMimeType) { 
            
    http.overrideMimeType('text/html; charset=windows-1251');// Устанавливаем тип содержимого и кодировку
            //http.overrideMimeType('text/plain; charset=windows-1251');
            //http.overrideMimeType('text/xml; charset=windows-1251');
        
    }
    if( 
    http 
    {
        
    http.open('get'linktrue); // Открываем соединение
        
    http.onreadystatechange = function () 
        {
            if(
    http.readyState == 4) {// Если ответ получен
              
    if (http.status == 200) {// и если все нормально, то 
                
    cont.innerHTML http.responseText// Вствляем полученные от сервера данные в блок на нашей странице
              
    } else {
                
    cont.innerHTML "Загрузка не удалась: " http.status;
              }    
            }
        }
        
    http.send(null);  // Отправляем запрос серверу   
    }
    else 
    {
        
    document.location link;
    }
    }

    // создание ajax объекта
    function createRequestObject() 
    {
    try { return new 
    XMLHttpRequest() }
    catch(
    e
    {
        try { return new 
    ActiveXObject('Msxml2.XMLHTTP') }
        catch(
    e
        {
            try { return new 
    ActiveXObject('Microsoft.XMLHTTP') }
            catch(
    e) { return null; }
        }
    }
    }
    Основная страница index.php скрипт запрос делает на do.php и из базы достаются данные. Если в данных содержатся дополнительные javascript, то данные загружаются но доп скрипт не работает.

    Например вот этот скрипт для скроллинга:
    PHP:
    function jsScroller (owh) {
      var 
    self this;
      var list = 
    o.getElementsByTagName("div");
      for (var 
    0< list.lengthi++) {
        if (list[
    i].className.indexOf("Scroller-Container") > -1) {
          
    = list[i];
        }
      }
      
      
    //Private methods
      
    this._setPos = function (xy) {
        if (
    this.viewableWidth this.totalWidth
          
    this.viewableWidth this.totalWidth;
        if (
    00;
        if (
    this.viewableHeight this.totalHeight
          
    this.viewableHeight this.totalHeight;
        if (
    00;
        
    this._x x;
        
    this._y y;
        
    with (o.style) {
          
    left this._x +"px";
          
    top  this._y +"px";
        }
      };
      
      
    //Public Methods
      
    this.reset = function () {
        
    this.content o;
        
    this.totalHeight o.offsetHeight;
        
    this.totalWidth   o.offsetWidth;
        
    this._x 0;
        
    this._y 0;
        
    with (o.style) {
          
    left "0px";
          
    top  "0px";
        }
      };
      
    this.scrollBy = function (xy) {
        
    this._setPos(this._x xthis._y y);
      };
      
    this.scrollTo = function (xy) {
        
    this._setPos(-x, -y);
      };
      
    this.stopScroll = function () {
        if (
    this.scrollTimerwindow.clearInterval(this.scrollTimer);
      };
      
    this.startScroll = function (xy) {
        
    this.stopScroll();
        
    this.scrollTimer window.setInterval(
          function(){ 
    self.scrollBy(xy); }, 40
        
    );
      };
      
    this.swapContent = function (cwh) {
        
    c;
        var list = 
    o.getElementsByTagName("div");
        for (var 
    0< list.lengthi++) {
          if (list[
    i].className.indexOf("Scroller-Container") > -1) {
            
    = list[i];
          }
        }
        if (
    wthis.viewableWidth  w;
        if (
    hthis.viewableHeight h;
        
    this.reset();
      };
      
      
    //variables
      
    this.content o;
      
    this.viewableWidth  w;
      
    this.viewableHeight h;
      
    this.totalWidth   o.offsetWidth;
      
    this.totalHeight o.offsetHeight;
      
    this.scrollTimer null;
      
    this.reset();
    };
    </script>
    <script type="text/javascript">
    //Written by Nathan Faubion: http://n-son.com
    //Use this or edit how you want, just give me
    //some credit!
    function jsScrollbar (o, s, a, ev) {
      var self = this;
      
      this.reset = function () {
        //Arguments that were passed
        this._parent = o;
        this._src    = s;
        this.auto    = a ? a : false;
        this.eventHandler = ev ? ev : function () {};
        //Component Objects
        this._up   = this._findComponent("Scrollbar-Up", this._parent);
        this._down = this._findComponent("Scrollbar-Down", this._parent);
        this._yTrack  = this._findComponent("Scrollbar-Track", this._parent);
        this._yHandle = this._findComponent("Scrollbar-Handle", this._yTrack);
        //Height and position properties
        this._trackTop = findOffsetTop(this._yTrack);
        this._trackHeight  = this._yTrack.offsetHeight;
        this._handleHeight = this._yHandle.offsetHeight;
        this._x = 0;
        this._y = 0;
        //Misc. variables
        this._scrollDist  = 5;
        this._scrollTimer = null;
        this._selectFunc  = null;
        this._grabPoint   = null;
        this._tempTarget  = null;
        this._tempDistX   = 0;
        this._tempDistY   = 0;
        this._disabled    = false;
        this._ratio = (this._src.totalHeight - this._src.viewableHeight)/(this._trackHeight - this._handleHeight);
        
        this._yHandle.ondragstart  = function () {return false;};
        this._yHandle.onmousedown = function () {return false;};
        this._addEvent(this._src.content, "mousewheel", this._scrollbarWheel);
        this._removeEvent(this._parent, "mousedown", this._scrollbarClick);
        this._addEvent(this._parent, "mousedown", this._scrollbarClick);
        
        this._src.reset();
        with (this._yHandle.style) {
          top  = "0px";
          left = "0px";
        }
        this._moveContent();
        
        if (this._src.totalHeight < this._src.viewableHeight) {
          this._disabled = true;
          this._yHandle.style.visibility = "hidden";
          if (this.auto) this._parent.style.visibility = "hidden";
        } else {
          this._disabled = false;
          this._yHandle.style.visibility = "visible";
          this._parent.style.visibility  = "visible";
        }
      };
      this._addEvent = function (o, t, f) {
        if (o.addEventListener) o.addEventListener(t, f, false);
        else if (o.attachEvent) o.attachEvent('on'+ t, f);
        else o['on'+ t] = f;
      };
      this._removeEvent = function (o, t, f) {
        if (o.removeEventListener) o.removeEventListener(t, f, false);
        else if (o.detachEvent) o.detachEvent('on'+ t, f);
        else o['on'+ t] = null;
      };
      this._findComponent = function (c, o) {
        var kids = o.childNodes;
        for (var i = 0; i < kids.length; i++) {
          if (kids[i].className && kids[i].className == c) {
            return kids[i];
          }
        }
      };
      //Thank you, Quirksmode
      function findOffsetTop (o) {
        var t = 0;
        if (o.offsetParent) {
          while (o.offsetParent) {
            t += o.offsetTop;
            o  = o.offsetParent;
          }
        }
        return t;
      };
      this._scrollbarClick = function (e) {
        if (self._disabled) return false;
        
        e = e ? e : event;
        if (!e.target) e.target = e.srcElement;
        
        if (e.target.className.indexOf("Scrollbar-Up") > -1) self._scrollUp(e);
        else if (e.target.className.indexOf("Scrollbar-Down") > -1) self._scrollDown(e);
        else if (e.target.className.indexOf("Scrollbar-Track") > -1) self._scrollTrack(e);
        else if (e.target.className.indexOf("Scrollbar-Handle") > -1) self._scrollHandle(e);
        
        self._tempTarget = e.target;
        self._selectFunc = document.onselectstart;
        document.onselectstart = function () {return false;};
        
        self.eventHandler(e.target, "mousedown");
        self._addEvent(document, "mouseup", self._stopScroll, false);
        
        return false;
      };
      this._scrollbarDrag = function (e) {
        e = e ? e : event;
        var t = parseInt(self._yHandle.style.top);
        var v = e.clientY + document.body.scrollTop - self._trackTop;
        with (self._yHandle.style) {
          if (v >= self._trackHeight - self._handleHeight + self._grabPoint)
            top = self._trackHeight - self._handleHeight +"px";
          else if (v <= self._grabPoint) top = "0px";
          else top = v - self._grabPoint +"px";
          self._y = parseInt(top);
        }
        
        self._moveContent();
      };
      this._scrollbarWheel = function (e) {
        e = e ? e : event;
        var dir = 0;
        if (e.wheelDelta >= 120) dir = -1;
        if (e.wheelDelta <= -120) dir = 1;
        
        self.scrollBy(0, dir * 20);
        e.returnValue = false;
      };
      this._startScroll = function (x, y) {
        this._tempDistX = x;
        this._tempDistY = y;
        this._scrollTimer = window.setInterval(function () {
          self.scrollBy(self._tempDistX, self._tempDistY); 
        }, 40);
      };
      this._stopScroll = function () {
        self._removeEvent(document, "mousemove", self._scrollbarDrag, false);
        self._removeEvent(document, "mouseup", self._stopScroll, false);
        
        if (self._selectFunc) document.onselectstart = self._selectFunc;
        else document.onselectstart = function () { return true; };
        
        if (self._scrollTimer) window.clearInterval(self._scrollTimer);
        self.eventHandler (self._tempTarget, "mouseup");
      };
      this._scrollUp = function (e) {this._startScroll(0, -this._scrollDist);};
      this._scrollDown = function (e) {this._startScroll(0, this._scrollDist);};
      this._scrollTrack = function (e) {
        var curY = e.clientY + document.body.scrollTop;
        this._scroll(0, curY - this._trackTop - this._handleHeight/2);
      };
      this._scrollHandle = function (e) {
        var curY = e.clientY + document.body.scrollTop;
        this._grabPoint = curY - findOffsetTop(this._yHandle);
        this._addEvent(document, "mousemove", this._scrollbarDrag, false);
      };
      this._scroll = function (x, y) {
        if (y > this._trackHeight - this._handleHeight) 
          y = this._trackHeight - this._handleHeight;
        if (y < 0) y = 0;
        
        this._yHandle.style.top = y +"px";
        this._y = y;
        
        this._moveContent();
      };
      this._moveContent = function () {
        this._src.scrollTo(0, Math.round(this._y * this._ratio));
      };
      
      this.scrollBy = function (x, y) {
        this._scroll(0, (-this._src._y + y)/this._ratio);
      };
      this.scrollTo = function (x, y) {
        this._scroll(0, y/this._ratio);
      };
      this.swapContent = function (o, w, h) {
        this._removeEvent(this._src.content, "mousewheel", this._scrollbarWheel, false);
        this._src.swapContent(o, w, h);
        this.reset();
      };
      
      this.reset();
    };

    var scroller  = null;
    var scrollbar = null;
    window.onload = function () {
      scroller  = new jsScroller(document.getElementById("Scroller-1"), 400, 200);
      scrollbar = new jsScrollbar (document.getElementById("Scrollbar-Container"), scroller, false);
    }
    Другие скрипты тоже не работают. Дело в конфликте или в данном случае нельзя подгружать доп скрипты?
     
    #1 andrbaks, 15 Jan 2012
    Last edited by a moderator: 15 Jan 2012
  2. Todin

    Todin Member

    Joined:
    28 Jan 2011
    Messages:
    47
    Likes Received:
    7
    Reputations:
    0
    доп скрипты через eval() только, или через тэг <script src="file.js"></script>