2013-11-21 3 views
0

Я не могу понять, почему я получаю эту ошибку: Uncaught TypeError: Не удается прочитать свойство «опции» нулевых getFSREPlist (анонимной функции)Uncaught TypeError: Не удается прочитать свойство «опции» нулевых

Погрешность ссылается эта строка кода (21):

document.getElementById(elementidupdate).options.length=0; 

что странно, что он работал до этого нового Google Map API я просто положить на. Кроме того, он вытаскивает код страны «1» и помещает его в раскрывающийся список, но не код провинции «19».

Здесь на странице сценария:

getFSREPlist('1', 'fsrep-search-province', 'CountryID', '19');getFSREPlist('19', 'fsrep-search-city', 'ProvinceID', '3');   request.send(null); 

Вот полный файл:

function sack(file) { 
    this.xmlhttp = null; 
    this.resetData = function() { 
     this.method = "POST"; 
     this.queryStringSeparator = "?"; 
     this.argumentSeparator = "&"; 
     this.URLString = ""; 
     this.encodeURIString = true; 
     this.execute = false; 
     this.element = null; 
     this.elementObj = null; 
     this.requestFile = file; 
     this.vars = new Object(); 
     this.responseStatus = new Array(2); 
    }; 
    this.resetFunctions = function() { 
     this.onLoading = function() {}; 
     this.onLoaded = function() {}; 
     this.onInteractive = function() {}; 
     this.onCompletion = function() {}; 
     this.onError = function() {}; 
     this.onFail = function() {}; 
    }; 
    this.reset = function() { 
     this.resetFunctions(); 
     this.resetData(); 
    }; 
    this.createAJAX = function() { 
     try { 
      this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e1) { 
      try { 
       this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e2) { 
       this.xmlhttp = null; 
      } 
     } 
     if (!this.xmlhttp) { 
      if (typeof XMLHttpRequest != "undefined") { 
       this.xmlhttp = new XMLHttpRequest(); 
      } else { 
       this.failed = true; 
      } 
     } 
    }; 
    this.setVar = function (name, value) { 
     this.vars[name] = Array(value, false); 
    }; 
    this.encVar = function (name, value, returnvars) { 
     if (true == returnvars) { 
      return Array(encodeURIComponent(name), encodeURIComponent(value)); 
     } else { 
      this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true); 
     } 
    } 
    this.processURLString = function (string, encode) { 
     encoded = encodeURIComponent(this.argumentSeparator); 
     regexp = new RegExp(this.argumentSeparator + "|" + encoded); 
     varArray = string.split(regexp); 
     for (i = 0; i < varArray.length; i++) { 
      urlVars = varArray[i].split("="); 
      if (true == encode) { 
       this.encVar(urlVars[0], urlVars[1]); 
      } else { 
       this.setVar(urlVars[0], urlVars[1]); 
      } 
     } 
    } 
    this.createURLString = function (urlstring) { 
     if (this.encodeURIString && this.URLString.length) { 
      this.processURLString(this.URLString, true); 
     } 
     if (urlstring) { 
      if (this.URLString.length) { 
       this.URLString += this.argumentSeparator + urlstring; 
      } else { 
       this.URLString = urlstring; 
      } 
     } 
     this.setVar("rndval", new Date().getTime()); 
     urlstringtemp = new Array(); 
     for (key in this.vars) { 
      if (false == this.vars[key][1] && true == this.encodeURIString) { 
       encoded = this.encVar(key, this.vars[key][0], true); 
       delete this.vars[key]; 
       this.vars[encoded[0]] = Array(encoded[1], true); 
       key = encoded[0]; 
      } 
      urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0]; 
     } 
     if (urlstring) { 
      this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator); 
     } else { 
      this.URLString += urlstringtemp.join(this.argumentSeparator); 
     } 
    } 
    this.runResponse = function() { 
     eval(this.response); 
    } 
    this.runAJAX = function (urlstring) { 
     if (this.failed) { 
      this.onFail(); 
     } else { 
      this.createURLString(urlstring); 
      if (this.element) { 
       this.elementObj = document.getElementById(this.element); 
      } 
      if (this.xmlhttp) { 
       var self = this; 
       if (this.method == "GET") { 
        totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString; 
        this.xmlhttp.open(this.method, totalurlstring, true); 
       } else { 
        this.xmlhttp.open(this.method, this.requestFile, true); 
        try { 
         this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 
        } catch (e) {} 
       } 
       this.xmlhttp.onreadystatechange = function() { 
        switch (self.xmlhttp.readyState) { 
         case 1: 
          self.onLoading(); 
          break; 
         case 2: 
          self.onLoaded(); 
          break; 
         case 3: 
          self.onInteractive(); 
          break; 
         case 4: 
          self.response = self.xmlhttp.responseText; 
          self.responseXML = self.xmlhttp.responseXML; 
          self.responseStatus[0] = self.xmlhttp.status; 
          self.responseStatus[1] = self.xmlhttp.statusText; 
          if (self.execute) { 
           self.runResponse(); 
          } 
          if (self.elementObj) { 
           elemNodeName = self.elementObj.nodeName; 
           elemNodeName.toLowerCase(); 
           if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") { 
            self.elementObj.value = self.response; 
           } else { 
            self.elementObj.innerHTML = self.response; 
           } 
          } 
          if (self.responseStatus[0] == "200") { 
           self.onCompletion(); 
          } else { 
           self.onError(); 
          } 
          self.URLString = ""; 
          break; 
        } 
       }; 
       this.xmlhttp.send(this.URLString); 
      } 
     } 
    }; 
    this.reset(); 
    this.createAJAX(); 
} 
var ajax = new Array(); 

function getFSREPlist(sel, elementidupdate, fsrepvariable, currentvalue) { 
    if (sel == '[object]' || sel == '[object HTMLSelectElement]') { 
     var FSREPID = sel.options[sel.selectedIndex].value; 
    } else { 
     var FSREPID = sel; 
    } 
    document.getElementById(elementidupdate).options.length = 0; 
    var index = ajax.length; 
    ajax[index] = new sack(); 
    ajax[index].requestFile = 'http://www.cabcot.com/wp-content/plugins/firestorm-real-estate-plugin/search.php?' + fsrepvariable + '=' + FSREPID + '&cvalue=' + currentvalue; 
    ajax[index].onCompletion = function() { 
     ElementUpdate(index, elementidupdate) 
    }; 
    ajax[index].runAJAX(); 
} 

function ElementUpdate(index, elementidupdate) { 
    var obj = document.getElementById(elementidupdate); 
    eval(ajax[index].response); 
} 
+0

Отформатируйте свой код и сделайте его читаемым. –

+2

'document.getElementById (elementidupdate)' равно null. Вы определили элемент со значением переменной 'elementidupdate' – Satpal

+0

@Satpal - я запутался в этом скрипте. Я не могу понять, почему это null для одной из переменных (провинций), но страна работает нормально. Я не знаю, почему мой мозг сегодня не работает. Как это исправить? –

ответ

1

Вы должны позвонить getFSREPlist, когда DOM загружен. Я побежал

document.getElementById('fsrep-search-province').options.length=0 

из chrome´s console. в то время как страница по-прежнему загружалась и вызывала ту же ошибку.

http://i.imgur.com/GBFizq1.png

+0

Я думаю, что вы правы. Я попробовал следующее, но я должен неправильно его кодировать: $ (function ElementUpdate (index, elementidupdate)) { \t var obj = document.getElementById (elementidupdate); \t eval (ajax [указатель].ответ); \t }); –

+0

Ну, я думаю, было бы проще: отбросить все эти изменения, которые вы применили, и редактировать только этот блок кода (в настоящее время в строке 86 по индексу): getFSREPlist ('2', 'fsrep-search-province' , 'CountryID', '3'); getFSREPlist ('3', 'fsrep-search-city', 'ProvinceID', '31'); \t request.send (null); к: $ (функция() { getFSREPlist ('2', 'fsrep-поиск-область', 'CountryId', '3'); getFSREPlist ('3', 'fsrep- поиск-город' , 'ПровинцияID', '31'); request.send (null); }); –

+0

Я пробовал код выше, но он не работает с wordpress, поэтому я пошел другим методом: jQuery (document) .ready (function ($) {getFSREPlist ('1', 'fsrep-search-province', ' CountryID ',' 19 '), getFSREPlist ('19', 'fsrep-search-city','IDID ',' 34 '), request.send (null);}); ---------- Теперь он бросает другой код и работает. Вот новый код ошибки: Неподготовлен ReferenceError: запрос не определен (индекс): 86 (анонимная функция) (индекс): 86 (анонимная функция) jquery.js? Ver = 1.3.2: 1 o.extend. каждый jquery.js? ver = 1.3.2: 1 o.extend.ready jquery.js? ver = 1.3.2: 1 –

Смежные вопросы