Announcement

Collapse
No announcement yet.

Jquery event.type in Firefox funktioniert nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Jquery event.type in Firefox funktioniert nicht

    Ich möchte mir ein event ausgeben lassen.
    1.
    Code:
    $(":button,:radio").click(function(){
                             $(this).einzeldaten();// eigenes Plugin ansprechen
                           })
    ich meinem Plugin soll ermittelt werden welches Event das Plugin aufruft.

    Code:
    ;(function( $ ){
        $.fn.einzeldaten = function() {
           
          return this.each(function(){
           
            //pruefen ob die Routine innerhalb eines <form> ausgelöst wurde
           innerhalb_form_testen($(this).attr('id'));
            
          }); //return this.each ENDE 
        };//$.fn.einzeldaten ENDE
    /********************************************
     * Feststellen welchen Status das Objekt hat
     * innerhalb eines Formtag oder ausserhalb 
     ********************************************/
     function innerhalb_form_testen(obj_ID)
       {
         var fo = $("#"+obj_ID).parents('form').attr('id'); // form Tag ID ermitteln
      //ueberprüfen ob var gefuellt ist
         if(typeof(fo) != "undefined")
                    {
                   alert(event.type);
                    verarbeiten(fo);
                    return ;
                    }
         else
                    {
                    return false
                    }// if(typeof(fo)ENDE
      }//function innerhalb_form_testen ENDE
    function verarbeiten(fo)
      { 
          
         //tabindex ermitteln
                   var $tabs = $('#tabs').tabs();
    		var idPrefix = $tabs.tabs('option', "idPrefix");
    		var selected = $tabs.tabs('option', "selected");
    		var aktiv_tab = "#"+idPrefix+selected;
    		    
                         
                       
                     $("#"+fo).validate({
                          submitHandler: function(form) {
                            var options= {    
    					type:'POST',
    					datatype:'html',
    					target:aktiv_tab,
                                            cache: false,
    					contentType: "application/x-www-form-urlencoded;charset=utf-8",
                                            beforeSubmit:  zeigeRequest,
                   				success: zeigeErgebnis
                                           
    			  }
     
                                    // bind form using 'ajaxForm' 
                                                 $(form).ajaxForm(options); 
                                                
                     },
                     rules: {
    			kostform:"required",
                            kf:"required"
                            
                    }
                        
            
        });
       return;      
             
      }//function verarbeiten
    })( jQuery );
    Der IE führt alles brav aus, jedoch meldet mir der FF event undefined

    was muss ich ändern, dass FF auch das Event meldet.

  • #2
    Schon mal im FF geschaut, was für Javascriptfehler vorhanden sind? Es ist unwahrscheinlich, dass der FF das Event nicht kennt

    ich meinem Plugin soll ermittelt werden welches Event das Plugin aufruft.
    Irgendwie sehe ich das im Programmcode nicht. Da wird etwas innerhalb oder außerhalb eines Form-Tags geprüft


    ;(function( $ ){

    Das Semikolon erscheint überflüssig
    Christian

    Comment


    • #3
      das Plugin ist mein erster Versuch.

      es soll zunächst mal alles abfangen was an klicks in einem UI dialog gemacht wird.
      So erfolgt der Aufruf:

      Code:
      $(":button,:radio").click(function(){
                               $(this).einzeldaten();
                             })
      $("select").change(function(){
                                 $(this).einzeldaten();
                             })
       $("textarea").blur(function(){
                                 $(this).einzeldaten();
                             })
      da bei einigen events eine einfache Routine startet, wie z.B eine Weiterleitung oder etwas schliessen und bei der keine Daten weitergegeben werden müssen, wird nun geprüft ob ein <form> vorhanden ist oder nicht.

      Ist form da = machwas.
      Ist keines da, das was gemacht werden soll.( schliessen oder weiterleiten)

      der IE macht es , FF nicht

      ReferenceError: event is not defined
      localhost/ordner/22/js/jquery.einzeldaten-1.0.js
      Line 25

      Comment


      • #4
        Ich hege so meine Zweifel, dass ich das gewünschte Ziel so erreiche.

        Zur Lage:
        ich habe einen UI Dialog in dem ich in verschiedenen Tabs Formulare mit verschiedenen Funktionen anzeigen lasse. Ich möchte jetzt in einem Plugin zunächst prüfen was für ein event ausgelöst wurde, ob mit diesem event auch ein Form gekoppelt ist in dem notwendige Info vorgehalten werden.
        Dann soll ein Überpüfen der notwendigen Werte stattfinden ( validate Plugin) und ein Ajax Request soll ausgelöst werden. Bis hierhin hab ich es funktionierend.
        Code:
        var options= {    
        					type:'POST',
        					datatype:'html',
        					target:aktiv_tab,
                                                cache: false,
        					contentType: "application/x-www-form-urlencoded;charset=utf-8",
                                                beforeSubmit:  zeigeRequest,
                       				success: zeigeErgebnis
                                               
        			  }
         
                                        // bind form using 'ajaxForm' 
                                                     $(form).ajaxForm(options);
        Im success liefert er mir die Ergebnisse, die ich aber in einer Funktion ausserhalb des Plugin ausgeben will und muss, da diese Funktion auch von anderen Ajax Request genutzt wird. Kann ich diese Funktionen überhaupt ansprechen, wenn ja wie? wenn nein, dann ist mein Plugin überflüssig.

        Comment


        • #5
          Originally posted by A.DA View Post
          So erfolgt der Aufruf:

          Code:
          $(":button,:radio").click(function(){
                                   $(this).einzeldaten();
                                 })
          $("select").change(function(){
                                     $(this).einzeldaten();
                                 })
           $("textarea").blur(function(){
                                     $(this).einzeldaten();
                                 })

          der IE macht es , FF nicht

          ReferenceError: event is not defined
          localhost/ordner/22/js/jquery.einzeldaten-1.0.js
          Line 25
          Es gibt mit Firefox/Mozilla bzw. dem W3C DOM kein globales "event"-Objekt, auch mit JQuery meines Wissens nicht. Wenn dein Eventhandler das "event"-Objekt verarbeiten will, dann muss die Funktion ein Argument dafür haben, also
          Code:
          $("select").change(function(evt) { alert(evt.type); });
          Wenn dann in weiteren Funktionen das Objekt gebraucht wird, muss du es natürlich beim Aufruf weiterreichen.

          Comment


          • #6
            Ich finde auch das Konzept dass das Plugin wissen muss um welche Events es sich handelt schon etwas seltsam. Warum machst Du dann nicht einfach verschiedene Plugin Funktionen? Eines für jedes Event? Oder lass das Plugin einfach die Registrierung machen.

            Zum Beispiel:

            Code:
            // code in der Seite
            $('.myPluginArea').registerMyPlugin();
            
            //code im plugin
            $.registerMyPlugin(elementsToRegister) {
              $(elementsToRegister)
                .find('select')
                .click(function() { doSomethingFancyWithSelectElement(this); } );
            }
            So hast Du die Kontrolle darüber welche Events woran gebunden werden und der Client hat die Möglichkeit das Plugin nur in einem Teil der Seite zu registrieren. Ich würde NIEMALS ein Plugin verwenden was sich automatisch auf sämtliche Click Events hängt, weil eine große Seite dadurch sehr langsam wird.

            P.S.: Mag sein dass das registrieren des JQuery Plugins nicht 100% korrekt ist, aber ich denke Du verstehst worauf ich hinaus will.

            Comment


            • #7
              Danke für die Tipps....

              Werde gleich heute Nachmittag noch einen Versuch starten.

              Comment


              • #8
                Ich bekomm es nicht hin, will aber auch nicht aufgeben. Versuche jetzt zuerst die Sache ohne Plugin..

                Dennoch scheint es ja hier schon zu stocken..

                Ich habe :
                HTML Code:
                <div class="tabseinzeldaten_alle"id="tab_einzelanzeige">
                	<ul>
                		<li><a href="#tabseinzeldaten">Daten bearbeiten</a></li>
                		<li><a href="#tabseinzel-2">Abgang</a></li>
                		<li><a href="#tabseinzel-3">Ver&auml;nderung</a></li>
                		<li><a href="#tabseinzel-4">Vor&uuml;bergehend Abwesend</a></li>
                		<li><a href="#tabseinzel-5">Drucke</a></li>
                		<li><a href="#tabseinzel-6">Freizeitgruppen</a></li>
                		<li><a href="#tabseinzel-7">Notgemeinschaften </a></li>
                	</ul>
                <div class="tabseinzeldaten" id="tabseinzeldaten" >
                <!--Kostformen-->
                	<div class="tab_kost">
                	             <span><label><u>Kostform</u></label></span>
                <form method="post" id="fo_kostform" action="buchen.php">
                	<?php
                                    echo "<input name=\"buch\" id=\"buch\" type=\"hidden\" value= \"".$_POST['buch']."\">\n";
                		    echo "<input name=\"abteilungID\" type=\"hidden\" value=\"".$_POST['abteilungID']."\">\n";
                                    echo "<input name=\"raumID\" type=\"hidden\" value=\"".$_POST['raumID']."\">\n ";
                                    echo "<input type=\"hidden\" name=\"angaben\" id=\"kostbuchen\" value=\"kost_buchen\">\n";
                                    echo "<input name=\"pcID\" type=\"hidden\" value=\"".$pcdaten[8]."\" />  ";
                                    echo "<input type=\"hidden\" name=\"bel_status\" id=\"bel_status\" value=\"belegt\">";
                                             foreach($kostformen as $kost)
                                                    {
                                                                 $kostf = ($kost['kostID'] == NULL)? 'kost1':$kost['kostID'] ;
                                                                $select = ($kostf == $gef_daten[0]['kostID'])?'checked':false;
                                                echo "<label><input type=\"radio\" id=\"kostform\" name=\"kostform\" value=\"".$kost['kostID']."\" ".$select.">".$kost['kostform']."</label><br/>\n";
                
                                                    $select = false;
                                                      }
                          echo "<strong>Bemerkung </strong><br>";
                          echo "<textarea cols=\"15\" rows=\"4\" id=\"kostformzusatz\" name=\"kostformzusatz\">".$gef_daten[0]['kostformzusatz']."</textarea><br/>\n ";
                	  echo "<strong>K&uuml;hlfachnummer </strong><br>";
                          echo "<textarea cols=\"15\" rows=\"4\" id=\"kf\" name=\"kf\">".$gef_daten[0]['kf']."</textarea><br/>\n ";
                          echo "<p><label style=\"display:none;\"for=\"kostform\" class=\"error\">Bitte eine Kostform <br>ausw&auml;hlen!</label></p>";
                          echo " <button class=\"ui-button ui-button-text-only ui-widget ui-state-default ui-corner-all\" id=\"bu_kostform\">
                						<span class=\"ui-button-text\">Kostform buchen</span>
                						</button>";
                            ?>
                         </form>
                mein Form mit den benötigten Werten. Hier sind es z.B Radiobutton zu den grundsätzlich benötigten input[hidden].

                So benutze ich nun den Button funktioniert es blendend. Validierung läuft, script wird ggf. unterbrochen und nach Korrektur der Ajax gestartet, die DB aktualisiert und die Ausgabe ebenfalls.

                benutze ich nun den Radiobutton muss ich zweimal klicken um die gewünschte Routine auszulösen. ( IE und FF reagieren gleich)
                Code:
                 $(".tabseinzeldaten_alle")
                                          .find(':button,:radio')
                                          .click(function(event) {
                                              //alert(event.type);
                                            var fo = $(this).parents('form').attr('id'); // form Tag ID ermitteln
                                             var ID = $(this).attr('id');
                                               if(ID.indexOf('bu')==-1){$("#bu_"+ID).submit();}              
                                             verarbeiten(ID,fo); // Validierung mit ....ajaxSubmit()
                                          });
                ich vermute, dass ich dort einen Denkfehler mache und die Sache falsch angehe.

                Comment

                Working...
                X