<input value="COMPUTE MULTI LINE" onclick="var t = SomeFunction(document.inverse.InversestartingPoint.value, document.inverse.InversemultipleInputs.value, document.inverse.format[1].checked, document.inverse.prec.selectedIndex);
document.inverse.statusInverseMultipleMethod.value = t.status;
document.inverse.resultsInverseMultipleMethod.value = t.s12;" type="button" />
This is the area of the function that i have to split the textarea input
Code:
function SomeFunction(startingPoint,input, dmsformat, prec) {
if (document.all) {
lines = input.split("\r\n");
}
else {
lines = input.split("\n");
}
When i show the lines variable it looks the same before and after it is split. I loop through the lines after the split but it reads the whole textarea like it is one line. I don't see why the code is not split in the input.
A number of problems:
1. Your SomeFunction is not closed
2. document.all is a deprecated function available in MSIE onlyl
3. document.inverse is undefined
4. t.s12 represents what ???
Instead of having 4 statements in one onclick assignment,
why not just call a single function where the statements are defined there?
Sorry I only posted the part of the function that I thought was causing the issue. Here is the rest of the function. What I am trying to do is take multiple inputs from a text area and return the distant from several latitude and longitude points. The function returns only the first point taken from the text area. I have put alert boxes in several places through out the code and run it and it seems that it is reading all lines in the text area as a single line.
Code:
function GeodesicInverseMultiple(startingPoint,input, dmsformat, prec) {
var result = {};
result.p1 = "";
result.p2 = "";
result.status = "";
result.s12 = "";
var lines;
window.alert("Starting Point = " + startingPoint);
window.alert("Input String = " + input);
if (document.all) {
lines = input.split("\r\n");
}
else {
lines = input.split("\n");
}
window.alert("Lines = " + lines);
for (var i = 0; i < lines.length; i++) {
try {
var p1string = new String(startingPoint); //
p1string = p1string.replace(/^\s+/, "").replace(/\s+$/, "").split(/[\s,]+/, 6);
// Input is a blank-delimited line: lat1 lon1 lat2 lon2
var t = new String(lines[i]);
t = t.replace(/^\s+/,"").replace(/\s+$/,"").split(/[\s,]+/,6);
// if (t.length != 2)
//throw new Error("Need 2 input items");
var p1 = GeographicLib.DMS.DecodeLatLon(p1string[0], p1string[1]);
var p2 = GeographicLib.DMS.DecodeLatLon(t[0], t[1]);
//var s12 = parseFloat(t[1]);
t = geod.Inverse(p1.lat, p1.lon, p2.lat, p2.lon);
result.status = (i+1);
result.p1 = formatpoint(p1string[0], p1string[1], dmsformat, prec) + "\n";
result.p2 = formatpoint(t[0], t[1], dmsformat, prec) + "\n";
result.s12 += t.s12.toFixed(prec) + "\n";
}
catch (e) {
result.status = result.status + "ERROR: " + e.message;
result.p1 = "";
result.p2 = "";
result.s12 = "";
}
return result;
}
}
var tempField=document.penta.IOField.value;
tempField=tempField.replace(/\r/g,"") // If it doesn't exist, no harm no foul.
var lines=tempField.split("\n");
The code does not loop. I stuck and alert box after the line below and I only get one alert no matter how many lines I have in the textarea. I tried the solution from wbport but this did the same thing. Any help would be greatly appreciated.
I figured this out. The return was inside the loop so it was returning the value at the end of the first loop. I simply moved the curly bracket above the return and it functions properly now. Thanks to those who replied.
Bookmarks