2016-02-26 212 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

相关问题