Scriptdaemon
05-02-2007, 05:37 AM
This function works perfectly in Firefox, however in IE it does not focus when it should. For an example of what this does, click any of the "1 CD, 1 DVD" links on this test page http://moth.homelinux.com/~scriptdaemon/test/test.html
What should occur is shown in Firefox. It should focus on the CD input field after clicking the link and then focus on the DVD input field after enter is pressed in the CD input field, or vice versa depending on which field was submitted first. In IE, this doesn't focus in any occasion at all.
function editItems(number) {
if(edited)
return;
edited = true;
var tD = document.getElementById("itemsTd" + number);
tD.align = "center";
tD.style.padding = "0px";
tD.innerHTML = "<input type=\"text\" id=\"cdsInput\" style=\"width: 16px\" value=\"" + rows[number].cds + "\" />";
tD.innerHTML += " <input type=\"text\" id=\"dvdsInput\" style=\"width: 16px\" value=\"" + rows[number].dvds + "\" />";
var cdField = document.getElementById("cdsInput"), dvdField = document.getElementById("dvdsInput");
cdField.focus();
var save = function() {
if(rows[number].cds == 0 && rows[number].dvds == 0) {
alert("There must be at least one disc.");
return;
}
createTable();
edited = false;
};
cdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].cds = cdField.value;
tD.innerHTML = rows[number].cds + " CD";
tD.innerHTML += " <input type=\"text\" id=\"dvdsInput\" style=\"width: 16px\" value=\"" + dvdField.value + "\" />";
dvdField = document.getElementById("dvdsInput");
dvdField.focus();
dvdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].dvds = dvdField.value;
save();
}
};
}
};
dvdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].dvds = dvdField.value;
tD.innerHTML = "<input type=\"text\" id=\"cdsInput\" style=\"width: 16px\" value=\"" + cdField.value + "\" /> ";
tD.innerHTML += rows[number].dvds + " DVD";
cdField = document.getElementById("cdsInput");
cdField.focus();
cdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].cds = cdField.value;
save();
}
};
}
};
}
EDIT: You should also probably know, while not relevant to this problem, only the up and down arrows effect what's in the input fields after clicked.
What should occur is shown in Firefox. It should focus on the CD input field after clicking the link and then focus on the DVD input field after enter is pressed in the CD input field, or vice versa depending on which field was submitted first. In IE, this doesn't focus in any occasion at all.
function editItems(number) {
if(edited)
return;
edited = true;
var tD = document.getElementById("itemsTd" + number);
tD.align = "center";
tD.style.padding = "0px";
tD.innerHTML = "<input type=\"text\" id=\"cdsInput\" style=\"width: 16px\" value=\"" + rows[number].cds + "\" />";
tD.innerHTML += " <input type=\"text\" id=\"dvdsInput\" style=\"width: 16px\" value=\"" + rows[number].dvds + "\" />";
var cdField = document.getElementById("cdsInput"), dvdField = document.getElementById("dvdsInput");
cdField.focus();
var save = function() {
if(rows[number].cds == 0 && rows[number].dvds == 0) {
alert("There must be at least one disc.");
return;
}
createTable();
edited = false;
};
cdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].cds = cdField.value;
tD.innerHTML = rows[number].cds + " CD";
tD.innerHTML += " <input type=\"text\" id=\"dvdsInput\" style=\"width: 16px\" value=\"" + dvdField.value + "\" />";
dvdField = document.getElementById("dvdsInput");
dvdField.focus();
dvdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].dvds = dvdField.value;
save();
}
};
}
};
dvdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].dvds = dvdField.value;
tD.innerHTML = "<input type=\"text\" id=\"cdsInput\" style=\"width: 16px\" value=\"" + cdField.value + "\" /> ";
tD.innerHTML += rows[number].dvds + " DVD";
cdField = document.getElementById("cdsInput");
cdField.focus();
cdField.onkeydown = function(event) {
if(isEnter(event, this)) {
rows[number].cds = cdField.value;
save();
}
};
}
};
}
EDIT: You should also probably know, while not relevant to this problem, only the up and down arrows effect what's in the input fields after clicked.