postitlord
03-28-2005, 01:54 AM
With the help of coothead (http://www.htmlforums.com/showthread.php?s=&threadid=47222) and hysterio (http://www.htmlforums.com/showthread.php?s=&threadid=49244), I've developed a web page that lets me do my job better at RadioShack. You type in product numbers and the pictures are delivered right off RadioShack's web site, (if they have the image stored under the corresponding stock number).
Now I'm having a problem figuring out my own Javascript. When I type in 4313331*4313341, it's supposed to loop through all ten stock numbers, making for great potential shorthand. Instead the code dies, saying 'Error on page' in the bottom-left corner of Internet Explorer. This is only a problem when I'm introducing the asterisk. I've traced it to the red line below, but don't know what to start fixing.
All normal searches like 4313331 by itself, 4313332 by itself, etc. work just fine. You can type in
4313331/2/3/4/5/6/7/8/9/40/1 to see what it's supposed to look like.
http://ian.50webs.com/traceme.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<LINK REL="SHORTCUT ICON" HREF="favicon.ico">
<title>Display Picture - DDV DSC SWG ACT FUT</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="index.css" />
<script type="text/javascript">
//<![CDATA[
var url="http://www.radioshack.ca/images/RadioShack/";
function validate_and_show() {
var pattern = document.forms[0][1].value;
pattern = pattern.replace(".","-"); //only dashes
pattern = trim(pattern);
var delim = pattern.indexOf("/");
var range = pattern.indexOf("*"); //Special character, for a range.
var gen = 0;
var spe = 0;
var dir;
var sku;
//delimite used
if (delim != -1) {
//4313338/9/40
sku = pattern.split("/"); //beautiful Javascript array
sku[0] = clean(sku[0]);
for (i = 1; i < sku.length; i++) {
//fix sku
sku[i] = sku[i-1].substr(0, sku[i-1].length - sku[i].length) + sku[i];
}
for (j = 0; j < sku.length; j++) {
displayPic(sku[j]);
}
}
//range used (special) 23023*23033
else if (range != -1) {
sku = pattern.split("*")*1;
sku[0] = clean(sku[0]);
sku[1] = clean(sku[1]);
/*var amountpics = sku[1]-sku[0];
if (amountpics >= 100) {
var userChoose = confirm("Are you sure you want to display " + amountpics + " pictures?");
if (userChoose == true) {
for (k = sku[0]; k <= sku[1]; k++) {
displayPic(sku[k]);
}
}
else {}*/
for (k = sku[0]; k <= sku[1]; k++) {
displayPic(k);
}
//}
}
//delimite not used
else {
displayPic(pattern);
}
selecttext();
}
function displayPic(sku) {
var dir = findpart(sku, "dir") + "/";
var gen = findpart(sku, "gen");
var spe = findpart(sku, "spe");
elemD=document.createElement("div");
elemP=document.createElement("p");
elemP.appendChild(document.createTextNode(gen+"-"+spe));
elemA=document.createElement("a");
elemA.setAttribute("href", "http://www.radioshack.ca/estore/Product.aspx?product="+gen+spe);
elemA.setAttribute("target", "_blank");
elemI=document.createElement("img"); //make
elemI.setAttribute("src",url+dir+gen+spe+"l.jpg");
elemA.appendChild(elemI);
elemD.appendChild(elemP);
elemD.appendChild(elemA);
document.body.appendChild(elemD);
}
//23-23 into 23-0023, but just after the dash
function padspe(number, length) {
var str = '' + number;
while (str.length < length)
str = '0' + str;
return str;
}
function trim(str) {
return str.replace(/^\s*|\s*$/g,"");
}
function checkKey(e) {
if (e && e.which) {
e = e;
characterCode = e.which;
}
else {
e = event;
characterCode = e.keyCode;
}
//enter pressed
if(characterCode == 13){
validate_and_show();
// return false; //I forgot why I put this in...
}
else{
return true;
}
}
function selecttext() {
document.forms[0][1].select();
}
function hide() {
if (document.body.appendChild(elemD)) {
document.body.removeChild(elemD);
}
}
//escape pressed
function press() {
if (event.keyCode == 27){
selecttext();
}
}
//23-23 into 2300023, cleanses
function clean(sku) {
return findpart(sku, "gen") + findpart(sku, "spe");
}
function findpart(sku, wants) {
///WTF DEBUGING GAHH
/*if (wants == "dir") {
alert ("gets here");
alert (sku);
alert (sku.indexOf("-"));
}*/ // dies after this alert
var dash = sku.indexOf("-");
//if (wants == "dir") { alert ("but not here?"); } //not here why?
var len = sku.length;
var dir;
//dash used
if (dash != -1) {
var gen = sku.substr(0, dash);
var spe = sku.substr(dash+1, len-dash);
if (gen < 10){
dir = gen * 10;
gen = gen * 100;
}
else if (gen < 100) {
dir = gen;
gen = gen * 10;
}
else {
dir = sku.substr(0, 2);
}
}
//dash not used
else {
dir = sku.substr(0, 2);
gen = sku.substr(0, 3);
spe = sku.substr(3, len);
}
spe = padspe(spe, 4);
if (wants == "dir") { return dir }
else if (wants == "gen") { return gen }
else if (wants == "spe") { return spe }
}
//]]>
</script></head><body onload=document.forms[0][1].focus() onkeypress=press()>
<table width=100% cellpadding=0 cellspacing=0>
<tr><td><form action="" onSubmit="return false;">
<fieldset><input type=text onKeyPress=checkKey(event) />
<input type=button value="display sku" onclick=validate_and_show() />
<input type=button value=summary onclick="alert('Gibberish removed for brief HTML')"/>
<input type=button value=details onclick="window.location.href='describe.html'" /></fieldset>
</form>
</td></tr></table></body></html>
Now I'm having a problem figuring out my own Javascript. When I type in 4313331*4313341, it's supposed to loop through all ten stock numbers, making for great potential shorthand. Instead the code dies, saying 'Error on page' in the bottom-left corner of Internet Explorer. This is only a problem when I'm introducing the asterisk. I've traced it to the red line below, but don't know what to start fixing.
All normal searches like 4313331 by itself, 4313332 by itself, etc. work just fine. You can type in
4313331/2/3/4/5/6/7/8/9/40/1 to see what it's supposed to look like.
http://ian.50webs.com/traceme.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<LINK REL="SHORTCUT ICON" HREF="favicon.ico">
<title>Display Picture - DDV DSC SWG ACT FUT</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="index.css" />
<script type="text/javascript">
//<![CDATA[
var url="http://www.radioshack.ca/images/RadioShack/";
function validate_and_show() {
var pattern = document.forms[0][1].value;
pattern = pattern.replace(".","-"); //only dashes
pattern = trim(pattern);
var delim = pattern.indexOf("/");
var range = pattern.indexOf("*"); //Special character, for a range.
var gen = 0;
var spe = 0;
var dir;
var sku;
//delimite used
if (delim != -1) {
//4313338/9/40
sku = pattern.split("/"); //beautiful Javascript array
sku[0] = clean(sku[0]);
for (i = 1; i < sku.length; i++) {
//fix sku
sku[i] = sku[i-1].substr(0, sku[i-1].length - sku[i].length) + sku[i];
}
for (j = 0; j < sku.length; j++) {
displayPic(sku[j]);
}
}
//range used (special) 23023*23033
else if (range != -1) {
sku = pattern.split("*")*1;
sku[0] = clean(sku[0]);
sku[1] = clean(sku[1]);
/*var amountpics = sku[1]-sku[0];
if (amountpics >= 100) {
var userChoose = confirm("Are you sure you want to display " + amountpics + " pictures?");
if (userChoose == true) {
for (k = sku[0]; k <= sku[1]; k++) {
displayPic(sku[k]);
}
}
else {}*/
for (k = sku[0]; k <= sku[1]; k++) {
displayPic(k);
}
//}
}
//delimite not used
else {
displayPic(pattern);
}
selecttext();
}
function displayPic(sku) {
var dir = findpart(sku, "dir") + "/";
var gen = findpart(sku, "gen");
var spe = findpart(sku, "spe");
elemD=document.createElement("div");
elemP=document.createElement("p");
elemP.appendChild(document.createTextNode(gen+"-"+spe));
elemA=document.createElement("a");
elemA.setAttribute("href", "http://www.radioshack.ca/estore/Product.aspx?product="+gen+spe);
elemA.setAttribute("target", "_blank");
elemI=document.createElement("img"); //make
elemI.setAttribute("src",url+dir+gen+spe+"l.jpg");
elemA.appendChild(elemI);
elemD.appendChild(elemP);
elemD.appendChild(elemA);
document.body.appendChild(elemD);
}
//23-23 into 23-0023, but just after the dash
function padspe(number, length) {
var str = '' + number;
while (str.length < length)
str = '0' + str;
return str;
}
function trim(str) {
return str.replace(/^\s*|\s*$/g,"");
}
function checkKey(e) {
if (e && e.which) {
e = e;
characterCode = e.which;
}
else {
e = event;
characterCode = e.keyCode;
}
//enter pressed
if(characterCode == 13){
validate_and_show();
// return false; //I forgot why I put this in...
}
else{
return true;
}
}
function selecttext() {
document.forms[0][1].select();
}
function hide() {
if (document.body.appendChild(elemD)) {
document.body.removeChild(elemD);
}
}
//escape pressed
function press() {
if (event.keyCode == 27){
selecttext();
}
}
//23-23 into 2300023, cleanses
function clean(sku) {
return findpart(sku, "gen") + findpart(sku, "spe");
}
function findpart(sku, wants) {
///WTF DEBUGING GAHH
/*if (wants == "dir") {
alert ("gets here");
alert (sku);
alert (sku.indexOf("-"));
}*/ // dies after this alert
var dash = sku.indexOf("-");
//if (wants == "dir") { alert ("but not here?"); } //not here why?
var len = sku.length;
var dir;
//dash used
if (dash != -1) {
var gen = sku.substr(0, dash);
var spe = sku.substr(dash+1, len-dash);
if (gen < 10){
dir = gen * 10;
gen = gen * 100;
}
else if (gen < 100) {
dir = gen;
gen = gen * 10;
}
else {
dir = sku.substr(0, 2);
}
}
//dash not used
else {
dir = sku.substr(0, 2);
gen = sku.substr(0, 3);
spe = sku.substr(3, len);
}
spe = padspe(spe, 4);
if (wants == "dir") { return dir }
else if (wants == "gen") { return gen }
else if (wants == "spe") { return spe }
}
//]]>
</script></head><body onload=document.forms[0][1].focus() onkeypress=press()>
<table width=100% cellpadding=0 cellspacing=0>
<tr><td><form action="" onSubmit="return false;">
<fieldset><input type=text onKeyPress=checkKey(event) />
<input type=button value="display sku" onclick=validate_and_show() />
<input type=button value=summary onclick="alert('Gibberish removed for brief HTML')"/>
<input type=button value=details onclick="window.location.href='describe.html'" /></fieldset>
</form>
</td></tr></table></body></html>