Hello,
I have a javascript code (a part of it is in php) that populates a pull-down menu. It works perfectly well with Explorer, Netscape and Firefox under Windows. But impossible to make it work with Explorer or Safari under Mac!!!
Is javascript different between windows and mac?
Here's the code, if anyone has the slightest idea or suggestion.

Thanks a lot in advance!

Gaston.

<SCRIPT type="text/javascript">

function MultiDimensionalArray(iRows,iCols)
{
var i;
var j;
var a = new Array(iRows);
for (i=0; i < iRows; i++)
{
a = new Array(iCols);
for (j=0; j < iCols; j++)
{
a[j] = "";
}
}
return(a);
}

function updateDirMenu(form,groupMenu,selectedIndex,selectedGroup, startDirValue){
var numdiringroup = Array()
var dirArray=MultiDimensionalArray(35,0)
var new_index=-1;
var groupPrefs = "<?=$group_prefs?>";
var change = 0;

if (selectedGroup == undefined) {
change = 1
if (groupPrefs != "") {
selectedGroup = groupPrefs}
}


<?php
$x = 0;
$numdiringroup = 0;
//$array = array( 'list', 'of', 'elements' );
while ($x < $num_groups) {


$xx = 0;
foreach ( $filelist[$x] as $element )
{

?>

if (<?=$x?> == selectedIndex) { <?
if ($folder_prefs <> "") {
if ($element == $folder_prefs) {
print "new_index=".$xx.";";}
}
?>
} //if $x==selectedIndex

<?
$xx = $xx + 1;

++$numdiringroup;
print "dirArray[".$x."].push('$element');";
}
++$x;
print "numdiringroup.push('$numdiringroup');";
$numdiringroup = 0;
}

?>


for(i = 0; i < form.elements.length; i++){
if(form.elements == groupMenu){
var dirMenu = form.elements[i+1]
break
}
}

var thelength // thelength is number of options the menu will have
thelength = numdiringroup[selectedIndex]
dirMenu.options.length = thelength

for(i=0; i<thelength; i++){ // if number of current options is less than options to be displayed, write more options
dirMenu.options.value=dirArray[selectedIndex]
dirMenu.options.text=dirArray[selectedIndex]
}

if(change == 1) {
if(selectedGroup != groupPrefs || new_index<0) {
if(thelength > 0) {
if(dirMenu.options[0].value == "Home") {
dirMenu.selectedIndex = 1
} //dirmenu
else dirMenu.selectedIndex = 0

} //if thelength
} //if selectedGroup

else dirMenu.selectedIndex = new_index
} //if change

else
for(i=0; i<thelength; i++){

if(dirMenu.options.value == startDirValue) {
dirMenu.selectedIndex = i}


} //for
change = 0
}


</SCRIPT>

There are no difference in JavaScript between platforms. Your problem can be that Mac is running only on IE5( there has not been any upgrade for past 3 years also) and you tested on pc IE6, I beleave. Last year as school project I did website cross platform but got hell of troubles.
And Safari I don't know, I do not use Safari.

Safari is a compliant browser so you should not have trouble getting JavaScript to work. My guess is that there is a syntax error that the other browsers are ignoring. have you tried validating the page?

Thanks peter_budo and bkendall for your suggestions.
The page has been validated with the w3c validator and it's html 4.01 validator.
I looked for a javascript validator but couldn't find any.
I also don't know where to find a previous version of explorer (version 5) to test my page. Or is there a browser that has the exact same behaviour as the Explorer 5 version?
When will all the browsers be compatible?!! (this is just a rhetoric question!) :)

Thanks again.

Gaston

For a javascript verifier, try this http://www.crockford.com/javascript/jslint.html

It can check your html as well, but its only got basic html support and hence is much stricter.

Put your js scripts in and it will tell you plenty about it. any editing you have to do to make it verify should also be done for your website to run sanely.

it would probably be more usefull if you ran the output of the php generation through jslint.

also, you seem to hardly ever use ';' to terminate lines... so you'll be entering lots of these to get jslint to parse your script.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.