2016-02-26 146 views
0

這是JavaScript代碼:的JavaScript遺漏的類型錯誤:.indexOf不是一個函數

/** 
* Created by Alejandro on 25/02/2016. 
*/ 

var aantalKoppels = 2; 

function setup(){ 
    var btnToevoegen = document.getElementById("btnToevoegen"); 
    btnToevoegen.addEventListener("click", koppelToevoegen); 
    var btnReplace = document.getElementById("btnReplace"); 
    btnReplace.addEventListener("click", update); 
} 

function koppelToevoegen() { 
    var parameterDataKoppel = document.createElement("div"); 
    var labelParameter = document.createElement("label"); 
    labelParameter.innerHTML = "Parameter:"; 
    labelParameter.setAttribute("for", "parameter" + aantalKoppels); 
    var parameter = document.createElement("input"); 
    parameter.id = "parameter" + aantalKoppels; 
    parameter.setAttribute("type", "text"); 
    var labelData = document.createElement("label"); 
    labelData.innerHTML = "Data:"; 
    labelData.setAttribute("for", "data" + aantalKoppels); 
    var data = document.createElement("input"); 
    data.id = "data" + aantalKoppels; 
    data.setAttribute("type", "text"); 
    parameterDataKoppel.appendChild(labelParameter); 
    parameterDataKoppel.appendChild(parameter); 
    parameterDataKoppel.appendChild(labelData); 
    parameterDataKoppel.appendChild(data); 
    var parameterDataKoppels = document.getElementById("parameterDataKoppels"); 
    parameterDataKoppels.appendChild(parameterDataKoppel); 
    aantalKoppels++; 
} 

function update() { 
    var parameterDataKoppels = []; 
    var rangnummerKoppel = 1; 
    for(var i = 0; i < aantalKoppels - 1; i++) { 
     var parameter = (document.getElementById("parameter" + rangnummerKoppel)).value; 
     var data = (document.getElementById("data" + rangnummerKoppel)).value; 
     parameterDataKoppels[i] = [parameter.trim(), data.trim()]; 
     rangnummerKoppel++; 
    } 
    var template = document.getElementById("template"); 
    vervangAlles(template, parameterDataKoppels); 
} 

function vervangAlles(template, parameterDataKoppels) { 
    for(var i = 0; i < parameterDataKoppels.length; i++) { 
     var result = vervang(template, parameterDataKoppels[i][0], parameterDataKoppels[i][1]); 
     template = result; 
    } 
    var output = document.getElementById("txtOutput"); 
    output.innerHTML = template; 
    return template; 
} 

function vervang(template, parameter, data) { 
    var result = template.substring(0, template.indexOf(parameter)) + data; 
    var i = template.indexOf(parameter) + parameter.length; 
    while(template.indexOf(parameter, i) !== -1) { 
     var indexVolgende = template.indexOf(parameter, i); 
     result += (template.substring(i, indexVolgende)) + data; 
     i = indexVolgende + parameter.length; 
    } 
    result += template.substring(i, template.length); 
    return result; 
} 

window.addEventListener("load",setup,false); 

此代碼應採取的模板(字符串),參數(串詞了文本)和數據(字符串)作爲輸入,然後用String數據替換文本中的參數。我做得到,我不能在最後一個函數在第一線弄清楚一個錯誤:

遺漏的類型錯誤:template.indexOf不是functionvervang @ ReplaceFunction.js:61vervangAlles @ ReplaceFunction.js:52update @ ReplaceFunction .js文件:47

這是html代碼:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <script type="text/javascript" charset="utf-8" src="../scripts/ReplaceFunction.js"></script> 
    <title>ReplaceFunction</title> 
</head> 
<body> 

<div> 
    <label for="template">Template:</label> 
    <input id="template" type="text" /> 
</div> 

<div id="parameterDataKoppels"> 
    <div> 
     <label for="parameter1">Parameter:</label> 
     <input id="parameter1" type="text" /> 
     <label for="data1">Data:</label> 
     <input id="data1" type="text" /> 
    </div> 
</div> 

<input id="btnToevoegen" type="button" value="Koppel toevoegen" /> 
<input id="btnReplace" type="button" value="Replace" /> 
<p id="txtOutput">geen output</p> 

</body> 
</html> 

我希望有人知道我爲什麼會得到這個錯誤。

+3

你有'模板=的document.getElementById( 「模板」)'。元素沒有'indexOf'方法。 – Oriol

+0

這個錯誤意味着你期望'template'是一個帶有'indexOf()'方法的對象的引用,但事實並非如此。 – Pointy

+0

Ow當然,我在getElementById的末尾忘了我的.value,因爲我需要它作爲String來使用indexOf:p 解決方案:var template =(document.getElementById(「template」))。value ; Thx很多(我總是忘記字符串的.value屬性) – Alejandro

回答

1

好像你的 '更新' 應該是

function update() { 
    var parameterDataKoppels = []; 
    var rangnummerKoppel = 1; 
    for(var i = 0; i < aantalKoppels - 1; i++) { 
     var parameter = (document.getElementById("parameter" + rangnummerKoppel)).value; 
     var data = (document.getElementById("data" + rangnummerKoppel)).value; 
     parameterDataKoppels[i] = [parameter.trim(), data.trim()]; 
     rangnummerKoppel++; 
    } 
    //var template = document.getElementById("template"); 
    var template = document.getElementById("template").value; 
    vervangAlles(template, parameterDataKoppels); 
} 
+0

是的,thx很多! – Alejandro

相關問題