php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-10-2008, 16:40
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard ie addEventListener this Problem

Hi, eine kleine Erweiterung zu meinem letzten Post:
ich will in einer Klasse zb. allen Links in einer Liste (Navigation) eine Funktion zuordnen, die dann per this-Zeiger auf den Link zugreifen kann.
Dank Blackgreetz klappt das auch, aber IE macht natürlich wieder Mucken.
Zum einen kennt IE (7) nicht addEventListener, so das ich mir eine Hilfsfunktion _addEventListener(element, event, handler) gesucht habe
PHP-Code:
// zuweisen einer Funktion innerhalb einer Methode
var basisNode document.getElementById("navigation");
var 
links basisNode.getElementsByTagName("a");
               for(
i=0i<links.lengthi++){
               
_addEventHandler(links[i], "mouseover"foo);
                 
//  links[i].addEventListener("mouseover", foo, false);    
               

Die Funktion _addEventListener(element, event, handler):
PHP-Code:
function _addEventHandler(elementeventhandler) {
  var 
_tmp_onevent;
  if (!
element || !event )
    return 
false;
  if (
element.addEventListener) {  // DOM-konform
    
element.addEventListener(eventhandlerfalse);
  }else {
    
_onevent 'on'+event;
    if (
element.attachEvent){     // IE
      
element.attachEvent(_oneventhandler);
    }
  }

mein Problem:
IE kommt mit this nicht zurecht:
PHP-Code:
function foo(){  alert('');} // IE ist brav
function foo(){ this.style.backgroundColor="red"alert('');}
// IE macht nicht das alert() und wirft auch keinen Fehler
// Interessanter weise führt FF this.style aus 
Korrekt wäre ja:
PHP-Code:
// zuweisen der funktion:
var links basisNode.getElementsByTagName("a");
      for(
i=0i<links.lengthi++){
           
_addEventHandler(links[i], "mouseover",function(ev){foo(this);});
      
//     links[i].addEventListener("mouseover", foo, false);    
      

und foo dann:
PHP-Code:
function foo(obj){
          try{ 
            
obj.style.backgroundColor="red"//IE meldet Object Error.
            
alert('');
          }catch(
e){alert(e);}} 
macht FF tadellos, IE meldet Object Error....
Kennt einer eine DOM entsprechende, auch im IE funktionierende Lösung....
Will nicht auf <a href="#" Menu.foo(this) /> zurückfallen wollen...
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #2 (permalink)  
Alt 30-10-2008, 17:25
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hast du mal versucht Handler nicht zu übergeben sondern direkt bei attachEvent und addEventListener zu definieren?

Könnte wetten, dass der IE erst foo ausführt und da this nicht definiert ist, gibts den Error.

mfg
Mit Zitat antworten
  #3 (permalink)  
Alt 30-10-2008, 17:48
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Meinst du so:
PHP-Code:
}else if (links[i].attachEvent) {
              
links[i].attachEvent("onmouseover",
                          function(
ev){
                                 
foo(obj){// statt obj auch this probiert: Object Error
                                        
obj.style.backgroundColor="red";
                                 };
                          }
              );
                   

?
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #4 (permalink)  
Alt 30-10-2008, 18:10
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
}else if (links[i].attachEvent) {
              
links[i].attachEvent("onmouseover",
                          function(
ev){
                                 
foo(this);
                          }
              );
                   

Probier mal das. Ansonsten guck ich nachher dann mal richtig

mfg
ps: wenn du kannst, gib mal noch den html code teilweise.. dann kann ich selber testen
Mit Zitat antworten
  #5 (permalink)  
Alt 30-10-2008, 18:32
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

ne, IE will einfach nicht....

Zitat:
ps: wenn du kannst, gib mal noch den html code teilweise.
Das wäre super - wie gesagt, bekäme es mit onclick="Menu.foo(this);" auch mit IE ins laufen, aber gerade wenn ich nur this übergeben will bietet sich das mit EventListener an....
Und ich will wissen wie es geht...
Link zur menu.js
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx

Geändert von mcmurphy (30-10-2008 um 18:34 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 30-10-2008, 22:12
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von mcmurphy
Zitat:
ps: wenn du kannst, gib mal noch den html code teilweise.
Das wäre super
Super Kommentar - passend zum Zitat :P

Problem liegt daran, dass bei this wohl irgendwas anderes übergeben wird, als das Objekt. Ich hab bis jetzt nicht wirklich rausgefunden, was this in dem Fall ist

Fazit: Bastel ein Workaround

und zwar folgender Maßen:

Du gibst allen Links eine ID und diese übergibst du dann an die Funktions foo(). z.b. so:

Code:
}else if (links[i].attachEvent) {
                       linkid= links[i].id;
                       links[i].attachEvent("onmouseover", function(ev){ foo(linkid); } );
                   }
Der Umweg über die Variable linkid ist nötig, weil man ansonsten nen Fehler bekommt (ich zumindest).

Ich hoffe jetz mal für dich, dass deine Links keine andere ID haben.
Ich guck zwar, wenn ich Zeit finde, nochmal, was da genau bei this übergeben wird, aber das Workaround passt zumindest
Mit Zitat antworten
  #7 (permalink)  
Alt 31-10-2008, 12:04
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ups, das Zitat sollte das hier noch beinhalten:
Zitat:
dann kann ich selber testen
THX Blackgreetz und schönen Dank auch WinzigWeich
Da versucht man besser zu werden / schöneren & DOM konformen Code zu schreiben und wer stellt uns ein Bein...

Wollte id eigentlich vermeiden, aber wenn die Herren Gates & Balmer meinen ....
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #8 (permalink)  
Alt 31-10-2008, 12:34
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@Kommentar: Schon klar

Mir fehlt ansich aber auch eine Funktion um rauszubekommen, was this jetzt genau ist.
This stellt auch im IE ein Object da, aber ich weiß einfach nicht, welches.

Was ich mir vorstellen könnte wäre ein <script>-Object, was ansich aber schwachsinnig wäre..

Insofern ist das Workaround wohl atm de beste Lösung...

..aber was hast du gegen id?

mfg
Mit Zitat antworten
  #9 (permalink)  
Alt 31-10-2008, 12:37
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Da ergibt sich noch eine weitere Frage in diesem Zusammenhang:
Wenn ich einem (Html-) Objekt per EventListener <ergänzt>eine Funktion zuordne</ergänzt>, sehe ich (bisher) keine Möglichkeit weitere Parameter zu übergeben, welche nicht in Form von auslesbaren Attributen vorliegen.... oder habe ich was überlesen / sehen?

Müßte in solchen Fällen immer ein reguläres HTML-Attribut ala <div onclick="fooBar(einParameter, nochEiner [, etcPP]);"> verwenden?
Oder, wie gesagt, habe ich bei meiner Grundlagenforschung was übersehen?
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx

Geändert von mcmurphy (31-10-2008 um 12:57 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 31-10-2008, 12:42
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
aber was hast du gegen id?
fände es einfach eleganter ohne eine ID zu arbeiten.
Man kann sich vertun (doppelte id's) - und in meinem Fall werden wird es eine LinkListe mit zwei Ebenen geben also müßte ich sowas wie
mainNavLink01
mainNavLink02
subNavLink01
subNavLink02
mainNavLink03
machen....
brrrr....

oder durchnummerien - und wenn dann ein Punkt rausfliegt....
Dann schon fast lieber inline ala onclick="return foo(this);", dann brauche ich mir um die id Benamsung keenen Kopp zu machen....

Zitat:
Was ich mir vorstellen könnte wäre ein <script>-Object, was ansich aber schwachsinnig wäre..
ergo Microsoft Konform
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx

Geändert von mcmurphy (31-10-2008 um 12:45 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 31-10-2008, 12:54
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja gut, dass mitder Nummerierung wäre aufwendig.
Anders könnte es laufen, wenn du das Menü gleich per Javascript||PHP ausgibst und dabei die Ids vergibst, da sollte dann theoretisch nichts passieren, weil du es ja alles hintereinander machst


Zitat:
Da ergibt sich noch eine weitere Frage in diesem Zusammenhang:
Alles in dem Post hab ich ehrlich gesagt nicht verstanden
z.b. im ersten Teil fehlt ein Verb und
"keine Möglichkeit weitere Parameter zu übergeben,"
< versteh ich nicht -g-

[quote]ergo Microsoft Konform [/qoute]

Immer diese Windows-Hasser !
Mit Zitat antworten
  #12 (permalink)  
Alt 31-10-2008, 13:06
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Immer diese Windows-Hasser...
wieso, du schreibst doch dass das Verhalten des IE anscheinend schwa******ig ist

zu meiner Parameter frage:
wenn ich in einer Klasse per addEventListener einem Event eine Function zuweise, kann ich anscheindend nur Parameter übergeben, welche im Namensraum der Klasse bekannt sind (und den Zeiger this, wenn ich es mit einem Browser zu tun habe )

Bei parametern, welche sich zb. aus PHP ergeben verwende ich die inline Event Regstrierung.

Lese gerade hier zu dem Thema....
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #13 (permalink)  
Alt 31-10-2008, 13:25
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
wieso, du schreibst doch dass das Verhalten des IE anscheinend schwa******ig ist
Nö. Hab geschrieben, dass this als script-Object schwachsinnig wäre, aber ich habs noch nicht geschafft rauszufinden, was this wirklich ist

Zitat:
wenn ich in einer Klasse per addEventListener einem Event eine Function zuweise, kann ich anscheindend nur Parameter übergeben, welche im Namensraum der Klasse bekannt sind (und den Zeiger this, wenn ich es mit einem Browser zu tun habe )
Wenn du als Namensraum der Klasse in deinem Beispiel jetzt:
Code:
function CMenu(){
//Namensraum
}
verstehst, dann stimmt es so nicht:

Code:
 objectT = "12345";

function CMenu(){

    this.init = function(){  //gekürzt
                  if (links[i].attachEvent) {
                       var testname = links[i].id;
                       links[i].attachEvent("onmouseover", function(ev){ foo(objectT); } );
                   }
    }
Funktioniert auch. Da objectT global ist müsste dein Namensraum "global" sein, womit die Frage doch irgendwie den Sinn verliert, oder?

Die verlinkte Seite kann ich nur befürworten, da dort einige Informationen zu dem Thema sind.

mfg
Mit Zitat antworten
  #14 (permalink)  
Alt 31-10-2008, 13:37
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Blackgreetz für deine hilfreichen Posts
Zitat:
aber ich habs noch nicht geschafft rauszufinden, was this wirklich ist
wenn du was rausfindest laß es mich wissen
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #15 (permalink)  
Alt 31-10-2008, 13:41
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kein Problem.

Im Übrigends gibt es eine ASP.Net Ajax Erweiterung für Javascript, wo es auch wirklich sowas wie Namespaces gibt.

So genau hab ich mir das noch nicht angeschaut. Mehr Infos im Open Book von Google: (: Klick mich :)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:48 Uhr.