2009-10-30 59 views

回答

0

加斜槓:

\"" + titleArray[x] + "\" 
0

試試這個逃跑的屬性引號,從而給你像你在你的例子中顯示的單引號。

html += "<option value=\"javascript:clientGalleryLink('" + titleArray[x] + "')\">" + titleArray[x] + "</option>"; 
1
<a href='javascript:clientGalleryLink("Business")'>Link</a> 
html += "<option value='javascript:clientGalleryLink(\"" + titleArray[x] + "\")'>" + titleArray[x] + "</option>"; 

能否請您試試這個。

謝謝。

0

這樣逃跑的問題是爲什麼最好避免在字符串中動態創建JavaScript-in-HTML。也不應該使用javascript:僞URL方案。

相反,考慮一個「不顯眼的腳本」的方法:移動數據進行嵌入的JS串並進入正常屬性,如class或,如果鏈路對應於頁面上的特定元件,所述href本身:

<a class="gallerylink" href="#Business">Link</a> 

for (var i= document.links.length; i-->0;) { 
    if (document.links[i].className==='gallerylink') { 
     document.links[i].onclick= function() { 
      clientGalleryLink(this.hash.substring(1)); 
      return false; 
     }; 
    } 
} 

第二個例子:

html += "<option value='javascript:clientGalleryLink(" + titleArray[x] + ")'>" + titleArray[x] + "</option>"; 

僅僅是一個混亂。除了缺少引用titleArray值的\',以及titleArray上缺少HTML轉義或JS字符串字面轉義(因此如果標題中有'"<&個字符,則會出現問題)。

當您選擇該選項時,您是否希望執行腳本,因爲您已將它放入value?它不會。

更好地使用DOM對象,而不是試圖在HTML內部的JavaScript內部插入JavaScript。例如,如果你正在尋找一個選擇框每一個所選擇的選項改變時調用clientGalleryLink

<div id="PlaceWhereYouWantToPutTheSelectBox"></div> 

<script type="text/javascript"> 
    var s= document.createElement('select'); 
    for (var i= 0; i<titleArray.length; i++) { 
     s.options[i]= new Option(titleArray[i], titleArray[i]); 
    } 
    s.onchange= function() { 
     clientGalleryLink(this.options[this.selectedIndex].value); 
    }; 
    document.getElementById('PlaceWhereYouWantToPutTheSelectBox').appendChild(s); 
</script> 

沒有醜陋的逃避必要的,沒有跨站點腳本安全漏洞。