Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.03.2007, 10:22
Diablo_bth



hallo, ich hätte gerne eine Funktion die in einem div-tag eine Dialogbox erstellt, wobei man der erstell-Funktion die Art des Dialogs (yes/no, ok, changepass) mitteilt sowie ein callback mit gibt, welcher beim drücken eines Knopfes betätigt wird ... dazu habe ich folgendes versucht:

Funktion zum erstellen der Dialogbox und eine, die aufgerufen wird wenn ein button gedrückt wird:
Quellcode:/*
- 'kind' - is one of "yesno" "message" "changepass"
- 'title' - text displayed at top of the menu
- 'callback' -
        if 'kind' is "yesno" either callback('yes') or  callback('no') will be called
        if 'kind' is "ok" callback('ok') will be called
        if 'kind' is "changepass" callback('changepass:<pass>:<re-enter>') or callback('cancel') will be called
*/
function popupdialog_modal( kind, title, callback ) {
    var table_head = "<table width=100% height=100% align=center><thead><tr class="graylabel"><td align=center colspan=2>"+title+"</td></tr></thead>";
    var table_body = "";

    switch(kind) {
    case "yesno":
        table_body =
        "<tbody width=100%>\
         <tr>\
          <td width=100% align=center>\
           <input id="dialog_yes" name="dialog_yes" value="yes" onclick="popupdialog_callback(\'yes\',"+callback+");" class="buttons" type="button">\
           <input id="dialog_no" name="dialog_no" value="no" onclick="popupdialog_callback(\'no\',"+callback+");" class="buttons" type="button">\
          </td>\
         </tr>\
        </tbody>";
        break;

    case "message":
        table_body =
        "<tbody width=100%><tr><td width=50% align=center>\
           <input id="dialog_ok" name="dialog_ok" value="ok" onclick="popupdialog_callback(\'ok\',"+callback+");" class="buttons" type="button">\
         </td></tr></tbody>";
        break;

    case "changepass":
        table_body =
        "<tbody width=100%>\
          <tr>\
            <td class="tdnoborder">Password</td>\
            <td class="tdnoborder">\
                <input name="password" type="password" id="password" size=20 />\
            </td>\
          </tr>\
          <tr>\
            <td class="tdnoborder">re-enter</td>\
            <td class="tdnoborder">\
                <input name="password2" type="password" id="password2" size=20 />\
            </td>\
          </tr>\
          <tr width=100%><td colspan=2 width=100% align=center>\
           <input id="dialog_changepass" name="dialog_changepass" value="change" onclick="popupdialog_callback(\'changepass:\'+password.value+\':\'+password2.value,"+callback+");" class="buttons" type="button" />\
           <input id="dialog_cancel" name="dialog_cancel" value="cancel" onclick="popupdialog_callback(\'cancel\',"+callback+");" class="buttons" type="button" />\
          </td></tr>\
        </tbody>";
        break;
    }


    var _popupdialog = document.getElementById('popupdialog');
    _popupdialog.style.visibility = "visible";
    _popupdialog.innerHTML = table_head + table_body;
}

function popupdialog_callback(code,callback) {
    var _popupdialog = document.getElementById('popupdialog')
    _popupdialog.innerHTML = "";
    _popupdialog.style.visibility = "hidden";

//    if( code == "cancel" || code == "ok" )
//        return;

    callback( code );
}
im IE7 funktioniert jetzt folgendes:
Quellcode:<a href="javascript: popupdialog_modal('changepass','Neues Passwort', function myf(x) {alert('myf called with: '+x);} );">change password</a>
aber im FF net - gibts in JavaScript irgend eine sinnvolle Funktionalität um Funktionen als Parameter für andere Funktionen zu übergeben?

folgendes Beispiel funktioniert in keinem Browser und ich verstehe net warum:
Quellcode:<script type="text/javascript">
      function mycallback(arg) {
        alert( "mycallback called with: " + arg );
      }
</script>
<a href="javascript: popupdialog_modal('changepass','Neues Passwort', mycallback );">change password</a>

--

zum Seitenanfang zum Seitenende Profil || Suche
001
22.03.2007, 10:47
Exec



im href="" darf niemals irgendwas mit javascript sein... mich wunderts, dass der IE da was macht.
Quellcode:<a href="" onclick="popupdialog_modal('changepass','Neues Passwort', mycallback );">bla</a>
sollte da eher funktionieren

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
002
22.03.2007, 16:42
oxff



So ein Quatsch Exec, wenn du es entsprechend mit `javascript:' prefixed, funktioniert das sowohl im FF als auch im IE.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
003
25.03.2007, 23:14
Exec



mhm dächte aber, dass da einige browser rumzicken von wegen popup-blocker und so?

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
004
25.03.2007, 23:33
K-Putt



Nein, grade wenn das PopUp in einem Link verpackt ist, sieht es der Browser als "erwünschtes" PopUp, und blockt nicht.

Was man auf jeden Fall nicht tun sollte, ist den Href Tag leer zu lassen bzw. ein "#" einzufügen, was die meisten machen. Dadurch springt der Browser immer nach #top, was bei längeren Webseiten nervt.
Normalerweise gehört da ein javascript:void(0); rein.

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
005
27.03.2007, 16:50
oxff



Hilft nur alles nicht bei seinem Problem weiter.

- Das heisst heutzutage nicht mehr `element.style.visibility = "true";' sondern `element.style.display = "block";'
- Poste doch mal, was dir die FF Fehlerkonsole sagt.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
006
04.04.2007, 12:10
Diablo_bth



danke für die hilfreichen Antworten ...

ich hab auch zuerst ein href='#' gemacht ... aber "javascript: void(0)" scheint wohl die bessere wahl zu sein.

aber sollte das nicht href="javascript: void(0);" mit ";" sein?

Lg

--

zum Seitenanfang zum Seitenende Profil || Suche