badben
06-24-2008, 12:49 PM
I am quite new to javascript and have created this function to show/hide rows of a html form on the page.
It works fine in Firefox but doesn't work in IE.
IE returns an error and it says there is an "object expected"
this is the code, can anybody suggest a place to look for the error.
Any help would be greatly appreciated. Thanks in advance
The show hide buttons are as follows:
<tr><td colspan="3" align="right"><img id="removeRow" src="images/spacer.gif" width="14px" height="14px" alt="more" onclick="javascript:addDelRow('del')" /> <img id="addRow" src="images/expand.jpg" width="14px" height="14px" alt="more" onclick="javascript:addDelRow('add')" /></td></tr>
The rows of the form are as follows:
</tr> <tr style="display:none;"> <th align="right"> <label for="seeker_category10" accesskey="10">Select job <u>c</u>ategory</label>:</th> <td align="left"><select name="seeker_category10" id="seeker_category10" size="1"><option value="" selected="selected"> select </option><option value="1">Accountancy</option><option value="2">Legal</option><option value="3">Clerical</option><option value="4">Construction</option><option value="5">Medical</option><option value="7">Consultancy</option><option value="8">Transport</option></select></td> <td></td> </tr>
and the javascript fundtion is:
function addDelRow(action){
var changeArea = document.getElementById("seeker_categories");
var allInputs = changeArea.getElementsByTagName("select");
//find number of input fields
var numRows = changeArea.getElementsByTagName('tr').length - 1;
var allRows = changeArea.getElementsByTagName('tr');
var addImg = document.getElementById('addRow');
var removeImg = document.getElementById('removeRow');
var numChanged = 0;
var n = 0; // number of rows
var d = 0; //
if (action == "add") {
for (i=1; i<=numRows; i++) {
if (allRows.item(i).style.display == 'none') {
//Current row is not displayed so display it if no rows have been changed yet
if (numChanged == 0) {
allRows.item(i).style.display = '';
numChanged++;
}
} else {
//increase number of displayed by 1
d++;
}
n++;
}
if (d >= n-1) {
addImg.src = 'images/spacer.gif';
}
//if more than one row displayed show remove item image
if (d >= 1) {
removeImg.src = 'images/contract.jpg';
}
} else if (action == "del") {
var nd = 0;
for (i=1; i<=numRows; i++) {
if (allRows.item(i).style.display == '') {
d++;
} else {
nd ++;
}
}
// delete row if its not the first
if ((d > 1) && (d <= numRows)) {
allRows.item(d-1).style.display = "none";
//reset input field
allInputs.item(d-1).options[0].selected = true;
}
// replace add image if less than maximum number of rows displayed
if (d-1 < numRows) {
addImg.src = 'images/expand.jpg';
}
if (d = 1) {
removeImg.src = 'images/spacer.gif';
}
}
//If no rows have been made visable they must all be visible
//so must make last one hidden
}
It works fine in Firefox but doesn't work in IE.
IE returns an error and it says there is an "object expected"
this is the code, can anybody suggest a place to look for the error.
Any help would be greatly appreciated. Thanks in advance
The show hide buttons are as follows:
<tr><td colspan="3" align="right"><img id="removeRow" src="images/spacer.gif" width="14px" height="14px" alt="more" onclick="javascript:addDelRow('del')" /> <img id="addRow" src="images/expand.jpg" width="14px" height="14px" alt="more" onclick="javascript:addDelRow('add')" /></td></tr>
The rows of the form are as follows:
</tr> <tr style="display:none;"> <th align="right"> <label for="seeker_category10" accesskey="10">Select job <u>c</u>ategory</label>:</th> <td align="left"><select name="seeker_category10" id="seeker_category10" size="1"><option value="" selected="selected"> select </option><option value="1">Accountancy</option><option value="2">Legal</option><option value="3">Clerical</option><option value="4">Construction</option><option value="5">Medical</option><option value="7">Consultancy</option><option value="8">Transport</option></select></td> <td></td> </tr>
and the javascript fundtion is:
function addDelRow(action){
var changeArea = document.getElementById("seeker_categories");
var allInputs = changeArea.getElementsByTagName("select");
//find number of input fields
var numRows = changeArea.getElementsByTagName('tr').length - 1;
var allRows = changeArea.getElementsByTagName('tr');
var addImg = document.getElementById('addRow');
var removeImg = document.getElementById('removeRow');
var numChanged = 0;
var n = 0; // number of rows
var d = 0; //
if (action == "add") {
for (i=1; i<=numRows; i++) {
if (allRows.item(i).style.display == 'none') {
//Current row is not displayed so display it if no rows have been changed yet
if (numChanged == 0) {
allRows.item(i).style.display = '';
numChanged++;
}
} else {
//increase number of displayed by 1
d++;
}
n++;
}
if (d >= n-1) {
addImg.src = 'images/spacer.gif';
}
//if more than one row displayed show remove item image
if (d >= 1) {
removeImg.src = 'images/contract.jpg';
}
} else if (action == "del") {
var nd = 0;
for (i=1; i<=numRows; i++) {
if (allRows.item(i).style.display == '') {
d++;
} else {
nd ++;
}
}
// delete row if its not the first
if ((d > 1) && (d <= numRows)) {
allRows.item(d-1).style.display = "none";
//reset input field
allInputs.item(d-1).options[0].selected = true;
}
// replace add image if less than maximum number of rows displayed
if (d-1 < numRows) {
addImg.src = 'images/expand.jpg';
}
if (d = 1) {
removeImg.src = 'images/spacer.gif';
}
}
//If no rows have been made visable they must all be visible
//so must make last one hidden
}