[Jscript] Bevestigings script werkt niet in FF

Pagina: 1
Acties:

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Ik heb onderstaand stukje code wat in IE perfect werkt, maar in FireFox niet. Ik denk alleen niet dat het probleem in onderstaand stuk code zit, maar in de onchange die ik gebruik. Ik heb in mn HTMl een formulier met daarin een select lijst met een aantal options. Op die select zelf heb ik een onchange="cAction()". Zodra ik daar bijvoorbeeld onchange="alert('test'); cAction()" van maak krijg ik geen alert in firefox. Iemand enig idee waar het aan kan liggen? Ik ben geen javascripter en online kan ik hier weinig over vinden, en wat ik heb kunnen vinden lijkt er niet echt op (wat betreft JS en FireFox problemen)

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function cAction()
{
    var host = document.getElementById('host').value;
    var action = document.getElementById('action').value;
    var cMessage = 'Are you sure you want to '+action+' the host \'' +host+ '\'?';

    if (action != '')
    {
        if ( confirm( cMessage ) )
        {
            window.location.replace('?host='+host+'&action='+action+'&confirmed=true');
        }
        else
        {
            document.getElementById('action').selectedIndex = 0;
        }
    }
}


Alvast bedankt!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-03 14:33

NMe

Quia Ego Sic Dico.

* NMe geeft m33p een retourtje naar Waar hoort mijn topic? en dit topic een enkele reis naar Webdesign, Markup & Clientside Scripting. :)

PRG>>WEB

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • André
  • Registratie: Maart 2002
  • Laatst online: 16:23

André

Analytics dude

En wat als je van de onchange een onclick maakt?

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
zodra ik dan de list uitklap krijg ik al een melding wat ook niet de bedoeling is ;)

excuus voor posten in verkeerde board.. zit hier al tijdje en wist waar ie hoorde maar niet goed opgelet.

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
De code waar het om gaat:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$bTPL .= "<tr onmouseover=\"this.className='hover'\" onmouseout=\"this.className=''\" onmousedown=\"this.className='down'\">";
$bTPL .= "<td><input type=\"checkbox\" name=\"delid[]\" id=\"delid[]\" value=\"" . $host['hostID'] . "\" /></td>";
$bTPL .= "<td onclick=\"window.location.href='?host=" . urlencode($host['hostname']) . "'\">" . $host['hostID'] . "</td>";
$bTPL .= "<td onclick=\"window.location.href='?host=" . urlencode($host['hostname']) . "'\"><b>" . gethostbyname($host['hostname']) . "</b></td>";
$bTPL .= "<td onclick=\"window.location.href='?host=" . urlencode($host['hostname']) . "'\">" . $host['hostname'] . "</td>";

if (online($host['hostname'], 3389))
        $bTPL .= "<td onclick=\"window.location.href='?host=" . urlencode($host['hostname']) . "'\">[img]\"images/icons/host_online.gif\">[/img]";
else
        $bTPL .= "<td onclick=\"window.location.href='?host=" . urlencode($host['hostname']) . "'\">[img]\"images/icons/host_down.gif\">[/img]";

$bTPL .= "<form action=\"\" method=\"POST\" name=\"actionForm\">";
$bTPL .= "<td style=\"vertical-align: middle\">
                <select style=\"width: 160px; margin-right: 15px\" name=\"action\" onchange=\"cAction();\">
                        <option value=\"\" selected></option>
                        <optgroup tabindex=1 label=\"System\">
                        <option value=\"shutdown\">Shutdown now!</option>
                        <option value=\"shutdown-delayed\">Delayed shutdown</option>
                        <option value=\"\" disabled></option>
                        <option value=\"restart\">Restart now!</option>
                        <option value=\"restart-delayed\">Delayed restart</option>
                </select>
        </td>";
$bTPL .= "<input type=\"hidden\" name=\"host\" value=\"" . urlencode($host['hostname']) . "\">";
$bTPL .= "</form>";
$bTPL .= "</tr>";


Het gaat om regel 14, maar mogelijk heeft regel 1 er ook wat mee te doen?

Overigens hoef ik geen commentaar over de PHP code, ik weet dat het niet netjes is, ik ben aan het experimenteren, vandaar :)

[ Voor 27% gewijzigd door m33p op 09-03-2006 16:27 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 16:23

André

Analytics dude

Kun je ook de gegenereerde code laten zien ;)

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
De output van bovenstaand

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<tr onmouseover="this.className='hover'" onmouseout="this.className=''" onmousedown="this.className='down'">
    <td>
        <input type="checkbox" name="delid[]" id="delid[]" value="3" />
    </td>
    <td onclick="window.location.href='?host=crm30-eurosoft'">3</td>
    <td onclick="window.location.href='?host=crm30-eurosoft'"><b>xxxxxx</b></td>
    <td onclick="window.location.href='?host=crm30-eurosoft'">crm30-eurosoft</td>
    <td onclick="window.location.href='?host=crm30-eurosoft'">[img]"images/icons/host_online.gif">[/img]
    <form action="" method="POST" name="actionForm">
        <td style="vertical-align: middle">
            <select style="width: 160px; margin-right: 15px" name="action" onchange="cAction();">
                <option value="" selected></option>
                <optgroup tabindex=1 label="System">
                <option value="shutdown">Shutdown now!</option>
                <option value="shutdown-delayed">Delayed shutdown</option>
                <option value="" disabled></option>
                <option value="restart">Restart now!</option>
                <option value="restart-delayed">Delayed restart</option>
            </select>
        </td>
        <input type="hidden" name="host" value="crm30-eurosoft">
    </form>
</tr>

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

JavaScript:
1
2
document.getElementById('host')
document.getElementById('action')

Ik zie geen element met id="action" of id="host", alleen met name="action" en name="host". Daarbij kan je denk ik beter de referentie naar je select gewoon middels het 'this' keyword meegeven.
Verder is je nesting van je HTML verkeerd; een form-element mag niet tussen td's worden genest (sterker nog: je hebt in deze toepassing niet eens een form-element nodig).
Verder is het netter om de value van een selected option middels de options-collection uit te vragen:
JavaScript:
1
var selectValue = select.options[select.selectedIndex].value;

[ Voor 18% gewijzigd door crisp op 09-03-2006 17:00 ]

Intentionally left blank


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Maar als ik het via select.options op wil halen moet ik wel form tags gebruiken als ik het goed begrijp? Anders is select niet gedefineerd (krijg ik te zien). Ik kom er nog niet helemaal uit. Ik heb 'name' naar 'id' veranderd, die had ik zelf ook kunnen zien maar na lang prutsen vallen zulke dingen soms niet eens meer op. Ook heb ik de form tags maar weg gehaald, maar het werkt niet. Ik krijg dus dat select niet gedefineerd is...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

Als ik je optgroup netjes afsluit en het tabindex attribuut dat daar niet hoort weglaat werkt dit prima in Firefox:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script type="text/javascript">

function cAction(actionSelect)
{
    var host = document.getElementById('host').value;
    var action = actionSelect.options[actionSelect.selectedIndex].value;
    var cMessage = 'Are you sure you want to '+action+' the host \'' +host+ '\'?';

    if (action != '')
    {
        if ( confirm( cMessage ) )
        {
            window.location.replace('?host='+host+'&action='+action+'&confirmed=true');
        }
        else
        {
            actionSelect.selectedIndex = 0;
        }
    }
}

</script>
<select id="action" onchange="cAction(this);">
    <option value="" selected></option>
    <optgroup label="System">
        <option value="shutdown">Shutdown now!</option>
        <option value="shutdown-delayed">Delayed shutdown</option>
        <option value="" disabled></option>
        <option value="restart">Restart now!</option>
        <option value="restart-delayed">Delayed restart</option>
    </optgroup>
</select>
<input type="hidden" id="host" value="crm30-eurosoft">

Intentionally left blank


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Vreemd, dan zit het probleem ergens anders. Ik heb je code (ook) rechtstreeks gekopieerd en in mijn app geplakt, en het probleem blijft. In IE werkt het perfect, maar in FF knalt de selectie terug naar index 0 (denk ik, het is weer wit na het klikken).

Zal het met het if (action != '') stukje te makken hebben? Nogmaals, ik ken zo goed als geen javascript, en ik ken geen andere manier om dit te doen in JS. Voor zover ik zo gauw kan zien bestaat er ook geen empty functie o.i.d voor JS?

Edit:
Ik heb er nu if ((action.length!=0) && (action.value!=null))van gemaakt, wat ook niet helpt...

[ Voor 13% gewijzigd door m33p op 09-03-2006 17:36 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

en als je mijn code los probeert? werkt het dan wel? (hier wel namelijk)

Intentionally left blank


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Je code los werkt hier gewoon (firefox 1.5.0.1 overigens).

De output zoals ie nu is:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<tr onmouseover="this.className='hover'" onmouseout="this.className=''" onmousedown="this.className='down'">
    <td><input type="checkbox" name="delid[]" id="delid[]" value="1" /></td>
    <td onclick="window.location.href='?host=xxxxxxxxxx'">1</td>
    <td onclick="window.location.href='?host=xxxxxxxxxx'"><b>xxxxxx</b></td>
    <td onclick="window.location.href='?host=xxxxxxxxxx'">xxxxxxxxxx</td>
    <td onclick="window.location.href='?host=xxxxxxxxxx'">[img]"images/icons/host_online.gif">[/img]
    <td>
        <select style="width: 160px; margin-right: 15px" id="action" onchange="cAction(this);">
            <option value="" selected></option>
            <optgroup label="System">
                <option value="shutdown">Shutdown now!</option>
                <option value="shutdown-delayed">Delayed shutdown</option>
                <option value="" disabled></option>
                <option value="restart">Restart now!</option>
                <option value="restart-delayed">Delayed restart</option>
            </optgroup>
        </select>
    </td>
    <input type="hidden" id="host" value="xxxxxxxxxx">
</tr>


Het stuk javascript is van jou overgenomen. Volgens mij zie ik niks over het hoofd wat betreft de aanpassingen in de HTML wel?

Het heeft overigens ook niets te maken met de onmousedown in de tablerow, dat heb ik al getest.

[ Voor 49% gewijzigd door m33p op 09-03-2006 17:46 ]


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Vraag me niet waarom maar opeens werkt het. Ik had de cache van FF al leeg gegooid dus daar lag het niet aan.... ik weet niet wat het was, ik zal er nog even naar kijken en als ik het weet dan staat het hier straks. Ik ben al lang blij dat het werkt, zit er al een tijdje mee te kloten.

Ik dank u allen

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

Ik zou die hidden input gewoon na de select plaatsen; binnen tr-elements mogen alleen td of th-elements voorkomen

Intentionally left blank


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Ok dat is ook fixed. Verder heb ik in het javascriptje nog de volgende regel toegevoegd:

JavaScript:
1
actionSelect.options[0].selected = true;


zodat er na de annulering van een keuze automatisch de eerste optie (leeg) geselecteerd is.

Nogmaals bedankt.

[ Voor 4% gewijzigd door m33p op 09-03-2006 18:00 ]


Verwijderd

Check sowieso ff in het menu:
Extra -> JavaScript console

Had je veel tijd kunnen besparen.

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Het JavaScript console van firefox gaf geen (fout)meldingen...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

m33p schreef op donderdag 09 maart 2006 @ 22:24:
Het JavaScript console van firefox gaf geen (fout)meldingen...
Omdat de onchange helemaal niet getriggered werd door fouten in je markup (hoewel een non-valid attribute op een element m.i. niet zo'n uitwerking zou mogen hebben).

Intentionally left blank

Pagina: 1