2011-07-15 56 views
-1

下面的代碼:Javascript錯誤:遺漏:房產編號後?

window.onload({ 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < inputs.length; i ++) { 
     if (options[i].type == 'option' && options[i].value == Country) { 
      options[i].attr('selected','selected'); 
     } 
    } 
}); 

我一直在掙扎與此幾個小時,並推斷它會更好,如果我向專家徵求意見。

UPDATE:來源

window.onload({ 
    var Country = 'United Kingdom'; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < inputs.length; i ++) { 
     if (options[i].type == 'option' && options[i].value == Country) { 
      options[i].attr('selected','selected'); 
     } 
    } 
}); 

更新#2:修復 問題的原因主要是我的愚蠢.. ktnxbai

function OnLoad() { 
    var Country = "<?= $core->HotelData($hid, "country"); ?>"; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < options.length; i ++) { 
     if (options[i].value == Country) { 
      options[i].selected = true; 
     } 
    } 
} 

window.onload = OnLoad(); 
+0

你有沒有檢查你的PHP腳本生成的源代碼? '' HotelData($ hid,「country」);只要有一個字符串涉及單引號就會中斷... – Tomalak

+0

@Tomalak PHP很好.. @Everyone else window.onload = function(){...},window.onload = function(){ ...},並且所有其他變體都不起作用。 –

+1

請注意,您的修復只是在定義點(而不是'load')處執行'OnLoad'函數,並且將函數的返回值(將被定義爲'undefined')賦給'window.onload' doesn'做任何有用的事情,都可以省略。 – sth

回答

1

你只是傳遞一個JSON對象window.onload,這事件不是功能。另外,你正在嘗試使用沒有jQuery對象的jQuery語法。

+2

一個JavaScript對象。 – davin

2

這裏是你如何修復錯誤:

window.onload(function(){ 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < inputs.length; i ++) { 
     if (options[i].type == 'option' && options[i].value == Country) { 
      options[i].attr('selected','selected'); 
     } 
    } 
}); 

但是,你應該聽的window對象上的load事件,觸發一個。因此,正確的語法是:

window.onload = function(){ 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < inputs.length; i ++) { 
     if (options[i].type == 'option' && options[i].value == Country) { 
      options[i].attr('selected','selected'); 
     } 
    } 
}; 

OR

jQuerified:

$(window).load(function(){ 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    $('select option[value="'+Country+'"]').attr('selected', 'selected'); 
}); 
+1

這將觸發onload事件,接收函數作爲參數。我不認爲這就是喬治試圖做的事情...... – DanC

+0

如果你錯過了這個區別(帶我讀了3次看到它),他在開放大括號前加了'function()'。這是必要的,所以JS知道你正在定義一個函數的內容,而不是一個對象。 – Herms

+0

@DanC:你爲什麼這麼想?他正試圖在那裏選擇一個默認值,爲什麼他不想要這個? – Shef

4

你大概意思寫:

window.onload = function() { 
    ... 
}; 
+0

這不起作用... –

+1

@George:什麼是錯誤信息/ ...? – sth

0

你可以嘗試這樣做:

window.onload = function(){ 
    ... 
}; 
0

試試這個

window.onload = function(){ 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    var options = document.getElementsByTagName('option'); 
    for (var i = 0; i < inputs.length; i ++) { 
     if (options[i].value == Country) { 
      options[i].selected = true; 
     } 
    } 
}; 
0
  1. 傳遞一個函數來onLoad
  2. 修復for循環。
  3. 修復attr調用。

應該是:

window.onload = function() { 
    var Country = '<?= $core->HotelData($hid, "country"); ?>'; 
    var options = document.getElementsByTagName('option'); 

    for (var i = options.length - 1; i >= 0; --i) { 
     if (options[i].type == 'option' && options[i].value == Country) { 
      $(options[i]).attr('selected','selected'); 
     } 
    } 
}