Avatar billede clauska Juniormester
18. november 2005 - 11:28 Der er 13 kommentarer og
1 løsning

script problemer i IE

Hej

Jeg har et script som virker fint i FF men i IE viser den bare arrayet på siden uden dropdown boxen.

Her kommer selve scriptet. I kan godt få hele siden men den er i PHP så ved ikke om det er den rigtige gruppe.

<script type="text/javascript">
topArray = new Array();
topArray[0] = new Option('<nobr>Please Select</nobr>', "http://localhost/standard/catalog/index.php");
topArray[1] = new Option('<nobr>Canon</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=6&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[2] = new Option('<nobr>Fox</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=4&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[3] = new Option('<nobr>GT Interactive</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=8&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[4] = new Option('<nobr>Hewlett Packard</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=9&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[5] = new Option('<nobr>Logitech</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=5&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[6] = new Option('<nobr>Matrox</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=1&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[7] = new Option('<nobr>Microsoft</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=2&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[8] = new Option('<nobr>Sierra</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=7&osCsid=53b66db1ddfc2277581600397f239bad");
topArray[9] = new Option('<nobr>Warner</nobr>', "http://localhost/standard2/catalog/index.php?manufacturers_id=3&osCsid=53b66db1ddfc2277581600397f239bad");
writeSelectBox(topArray, "select2", 1, "window.open(this.options[this.selectedIndex].value, '_top')", "margin-left: 10; width: 140;");
</script>
Avatar billede cayman Nybegynder
18. november 2005 - 11:36 #1
Kan du sende resten.

Tror der er problemer med at sætte <nobr> ind i optionen. Har kigger i MS-dokumentation, og kan ikke finde en "new Option()" contructor.
Ville selv have valgt document.createElement('option');
Avatar billede thesurfer Nybegynder
18. november 2005 - 12:44 #2
Brug W3C i stedet for MS-dokumentation: http://www.w3.org/

Her er er også eksempler: http://www.quirksmode.org/js/options.html

/theSurfer
Avatar billede clauska Juniormester
18. november 2005 - 13:26 #3
Her er hele filen

<html>
<head>
<link rel="STYLESHEET" type="text/css" href="stylesheet.css">
<script type="text/javascript" src="fade.js"></script>
<script type="text/javascript" src="select.js"></script>
<script type="text/javascript" src="writeSelect.js"></script>
</head>
  <body>
  <!-- infobox_start //-->
    <tr>
      <td>
        <table border="0" width="100%" cellspacing="0" cellpadding="1">
          <tr>
            <td height="14" class="infoBoxHeading_menu"><BR></td>
            <td width="100%" height="14" class="infoBoxHeading_menu">&nbsp;<?php echo BOX_HEADING_MANUFACTURERS ?></td>
            <td height="14" class="infoBoxHeading_menu" nowrap><BR></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="0" cellpadding="1" class="infoBox">
          <tr>
            <td>
              <table border="0" width="100%" cellspacing="0" cellpadding="3" class="infoBoxContents">

                <tr>
                  <td align="center" class="boxText">

                    <?php
                      $manufacturers_query = tep_db_query("select manufacturers_id, manufacturers_name from " . TABLE_MANUFACTURERS . " order by manufacturers_name");
                     
                      $manufacturers_array = array();
                          if (MAX_MANUFACTURERS_LIST < 2) {
                            $manufacturers_array[] = array('id' => '', 'text' => PULL_DOWN_DEFAULT);
                        }
                        echo "\n". '<script type="text/javascript">';
                       
                        echo "\n". 'topArray = new Array();';
                        echo "\n". 'topArray[0] = new Option(\'<nobr>' .PULL_DOWN_DEFAULT. '</nobr>\', "http://localhost/standard/catalog/index.php");';
                        $taeller=1;
                       
                        while ($manufacturers = tep_db_fetch_array($manufacturers_query)) {
                          $manufacturers_name = ((strlen($manufacturers['manufacturers_name']) > MAX_DISPLAY_MANUFACTURER_NAME_LEN) ? substr($manufacturers['manufacturers_name'], 0, MAX_DISPLAY_MANUFACTURER_NAME_LEN) . '..' : $manufacturers['manufacturers_name']);
                          $manufacturers_array[] = array('id' => $manufacturers['manufacturers_id'],
                                                                'text' => $manufacturers_name);
                         
                         
                 
                          echo "\n". 'topArray['.$taeller.'] = new Option(\'<nobr>' .$manufacturers_name. '</nobr>\', "http://localhost/standard2/catalog/index.php?manufacturers_id='.$manufacturers['manufacturers_id']. '&osCsid=' .tep_session_id().'");';
                          //echo "\n". 'topArray['.$taeller.'] = new Option()';
                          $taeller = $taeller + 1;
                         
                        }
                       
                         
                       
                        echo "\n". 'writeSelectBox(topArray, "select2", 1, "window.open(this.options[this.selectedIndex].value, \'_top\')", "margin-left: 10; width: 140;");';
                        echo "\n". '</script>';                                     
                        echo "\n";                               
                                                       
                   
                    ?>
                  </td>
                </tr>

              </table>
            </td>
          </tr>
        </table>

        </td>
      </tr>
    <!-- infobox_slut //-->
    </body>
</html>
Avatar billede clauska Juniormester
18. november 2005 - 13:32 #4
hvis jeg fjerner nobr viser den slet ikke dropdown boxen, hverken i FF eller IE
Avatar billede cayman Nybegynder
18. november 2005 - 14:07 #5
Hvad med funktionen writeSelectBox
Avatar billede cayman Nybegynder
18. november 2005 - 14:07 #6
Sender du osse den?
Avatar billede cayman Nybegynder
18. november 2005 - 14:16 #7
topArray[0]  = document.createElement('option');
topArray[0].text = 'Please Select';
topArray[0].value = 'http://localhost/standard/catalog/index.php';
...
Avatar billede olebole Juniormester
18. november 2005 - 18:14 #8
<ole>

Construtoren for et Option-object introducerede Netscape allerede i NS2.0 (JavaScript 1.0), så den skulle da meget gerne være velkendt:
    http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/option.html

Heller ikke MS-orienterede kodere burde den komme bag på - og der findes da også adskillige referencer til den på MS' sider ... f.eks:
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/select.asp

"The new Option constructor can also be used in Microsoft JScript."  ;o)

/mvh
</bole>
Avatar billede cayman Nybegynder
18. november 2005 - 23:58 #9
Har du en løsning Hr Bole, eller er du bare ude og manifestere dit uendelige vid?
Avatar billede olebole Juniormester
19. november 2005 - 00:35 #10
Jeg synes, det ville være forfriskende klædeligt, om du skruede lidt ned for charmen og læste min kommentar her:
    http://exp.dk/spm/665533#rid5928246

- og nej, jeg kan ikke give en løsning, før jeg ser fejlen i den resulterende HTML-kode. Én ting er dog helt sikkert: Et option-element kan aldrig indeholde andre elementer.

Det er kun FireFox og Opera, der har en så buggy DOM-håndtering, at den slags evt. kan lade sig gøre ... IE tillader det under ingen omstændigheder.
Avatar billede olebole Juniormester
19. november 2005 - 00:57 #11
clauska >> Hvad bruger du '<nobr>' og '</nobr>' til i dine options?
Kan du lægge en URL til siden?
Avatar billede olebole Juniormester
19. november 2005 - 01:15 #12
I øvrigt må jeg rette min antagelse: Alle de store browsere er tåbelige nok til at tillade DOM-indsætning af HTML-elementer i et option-element.
Dog er det kun FF, der er tåbelig nok til at forsøge at rendere et p-element med en rød border på 20px - indsat i et option-element!  :o|
Avatar billede clauska Juniormester
25. november 2005 - 11:15 #13
Her er writeselectbox JS filen. Jeg undskylder mit fravær var lige hængt op.

function writeSelectBox(matrix, id, size, onchange, css) {
    var d = window.document;

    var ie4 = (document.all != null);

    if (ie4) {
//        alert("Before!");
        var s = createIEString(matrix, id, size, onchange, css);
        document.write(s);
//        alert("After!");
//        alert(s);
    }

    else {
        document.write(createXString(matrix, id, size, onchange, css));
    }
}

function createIEString(matrix, id, size, onchange, css) {
    var str = "";
    // Span startTag   
        str += '<span class="select"';
        if (size == null)
            size = 1;
        str += ' size="' + size + '"';   
        if (id != null)
            str += ' id="' + id + '"';
        if (onchange != null)
            str += ' onchange="' + onchange + '"';
        if (css != null)
            str += ' style="' + css + '"';
        str += '>\n';
   
    // Table Tag
        str += '<table class="selectTable" cellspacing="0" cellpadding="0"\n';
        str += ' onclick="toggleDropDown(this.parentElement)">\n';
        str += '<tr>\n';
        str += '<td class="selected">&nbsp;</td>\n';
        str += '<td align="CENTER" valign="MIDDLE" class="Button"\n';
        str += ' onmousedown="this.style.border=\'2 inset buttonhighlight\'"\n';
        str += ' onmouseup="this.style.border=\'2 outset buttonhighlight\'">\n';
        str += '<span style="position: relative; left: 0; top: -2; width: 100%;">6</span></td>\n';
        str += '</tr>\n';
        str += '</table>\n';
       
    // DropDown startTag
        str += '<div class="dropDown" onclick="optionClick()" onmouseover="optionOver()" onmouseout="optionOut()">\n';
       
        for (var i=0; i<matrix.length; i++) {
            html    = matrix[i].html;
            value    = matrix[i].value;
            css      = matrix[i].css;
            selected = matrix[i].selected;
           
        // Write option starttag
            str += '<div class="option"';
            if (value != null)
                str += ' value="' + value + '"';
            if (css != null)
                str += ' style="' + css + '"';
            if (selected != null)
                str += ' selected';
            str += '>\n';
           
        // Write HTML contents
            str += html;
        // Write end tag
            str += '</div>\n';
        }
   
    //DropDown endtag
        str += '</div>\n';
       
    // Span endTag
        str += '</span>\n';
       
    return str;
}

function createXString(matrix, id, size, onchange, css) {
//    var str = "\n";
    // form startTag
    var str = '<form>\n';
    // Select startTag
    str += '<select';
    if (size == null)
        size = 1;
    str += ' size="' + size + '"';   
    if (id != null)
        str += ' id="' + id + '"';
    if (onchange != null)
        str += ' onchange="' + onchange + '"';
//    if (css != null)
//        str += ' style="' + css + '"';
    str += '>\n';
    // write options
    for (var i=0; i<matrix.length; i++) {
        html    = matrix[i].html;
        value    = matrix[i].value;
        css      = matrix[i].css;
        selected = matrix[i].selected;
       
    // Write option starttag
        str += '\n<option';
        if (value != null)
            str += ' value="' + value + '"';
//        if (css != null)
//            str += ' style="' + css + '"';
        if (selected != null)
            str += ' selected';
        str += '>';
       
    // Write HTML contents
        str += stripTags(html);
    // Write end tag
        str += '</option>\n';
    }
    str += '\n</select>\n';
    str += '</form>\n';

    return str;
}

function stripTags(str) {
    var s = 0;
    var e = -1;
    var r = "";

    s = str.indexOf("<",e);   

    do {
        r += str.substring(e + 1,s);
        e = str.indexOf(">",s);
        s = str.indexOf("<",e);
    }
    while ((s != -1) && (e != -1))

    r += str.substring(e + 1,str.length);

    return r;
}

function Option(html, value, css, selected) {
    this.html = html;
    this.value = value;
    this.css = css;
    this.selected = selected;
}
Avatar billede clauska Juniormester
09. november 2006 - 09:56 #14
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester