Regenbogenjonny: is visible funktioniert nicht recht

Hallo,

ich versuche, eine Tabellenzeile per JQuery sichtbar zu machen, aber es gelingt mir nicht.

<script type="text/javascript">
$(document).ready(function() {
$(".teileedit").click(function() {        
var my_uebergabe = this.id;
var my_id = my_uebergabe.split('_');

if ($('#editzeile_' + my_id[1]).is(':visible')) {
        alert('#editzeile_A' + my_id[1]);
$('#editzeile_' + my_id[1]).hide(300);
} else {
        alert('#editzeile_B' + my_id[1]);
$('#editzeile_' + my_id[1]).show(400);
}
});
});
</script>
<tr class='editzeile' id='editzeile_2020' style='display:none;'>
...

Auf dieselbe Art habe ich aber ein DIV problemlos sicht- bzw. unsichtbar machen können.

Verhält sich eine Tabellenzeile anders?

Jonny

  1. Verhält sich eine Tabellenzeile anders?

    Gelöst, war ein Tipfehler drin... Jonny

    1. Hallo,

      if ($('#editzeile_' + my_id[1]).is(':visible')) {

      Wie muß ich den Selector wählen, wenn ich ausdrücken möchte:

      Wenn irgendeine editierzeile "visible" ist, also egal welche ID sie hat?

      Oder anders ausgedrückt: Wenn irgendein Element sichtbar ist, dessen id mit "editzeile_" beginnt...

      Jonny

      1. Hallo Regenbogenjonny,

        Oder anders ausgedrückt: Wenn irgendein Element sichtbar ist, dessen id mit "editzeile_" beginnt...

        $('[id^="editzeile_"]').is(':visible') wäre mein Versuch.

        Bis demnächst
        Matthias

        --
        Signaturen sind bloed (Steel) und Markdown ist mächtig.
        1. $('[id^="editzeile_"]').is(':visible') wäre mein Versuch.

          Hallo Matthias,

          ja, so müsste es gehen. Mein Denkfehler war woanders. Wie nämlich kann ich in JS eine Funktion durch eine andere "deaktivieren". Also: Wenn Element xy "visible" ist, soll Funktion "sortieren" nicht mehr ansprechbar sein oder nicht mehr ausgeführt werden.

          Jonny

          1. Hallo,

            $(function() {
            $( "#sort" ).sortable({
             items: 'tbody:not(.ui-state-disabled)',
            ...
            

            bewirkt, dass ich Zeilen einer Tabelle, die in einen tbody eingefasst sind, sortieren kann. Das möchte ich unter bestimmten Umständen ausschalten. Deshalb dachte ich mir, dass ich der Tabelle mit der ID "sort" schlicht eine andere ID verpasse.

            Aber sowohl

            $('#sort').attr('sort','sort2');   
            

            als auch

            $('#sort').toggleClass('blabla');
            

            bewirken das nicht. In beiden Fällen kann ich weiterhin die Zeilen meiner Tabelle sortieren. Ich hätte aber gerne, dass die ID "sort" so umbenannt wird, dass das Sortieren nicht mehr funktioniert.

            Was mache ich hier falsch?

            Jonny

            1. Hallo,

              Deshalb dachte ich mir, dass ich der Tabelle mit der ID "sort" schlicht eine andere ID verpasse.

              Aber sowohl

              $('#sort').attr('sort','sort2');   
              

              ich hab zwar keine Ahnung von jquery, aber das sieht aus, als ob du dem Attribut "sort" den Wert "sort2" zuordnest.

              als auch

              $('#sort').toggleClass('blabla');
              

              bewirken das nicht.

              Hier willst du plötzlich die Klasse ändern.

              In beiden Fällen kann ich weiterhin die Zeilen meiner Tabelle sortieren. Ich hätte aber gerne, dass die ID "sort" so umbenannt wird, dass das Sortieren nicht mehr funktioniert.

              Was mache ich hier falsch?

              "#" steht für die ID, bzw. für das Attribut "ID".

              Gruß
              Kalk

              1. ich hab zwar keine Ahnung von jquery, aber das sieht aus, als ob du dem Attribut "sort" den Wert "sort2" zuordnest.

                was aber nicht zu klappen scheint, weil die tbodys nach wie vor sortierbar bleiben.

                Hier willst du plötzlich die Klasse ändern.

                habe ich genau so im Netz als Hinweis zur Änderung einer ID gefunden und ausprobiert.

                "#" steht für die ID, bzw. für das Attribut "ID".

                Ich weiß...

                Jonny

                1. Hallo Regenbogenjonny,

                  "#" steht für die ID, bzw. für das Attribut "ID".

                  Ich weiß...

                  Dann schau doch mal, welche Parameter attr() erwartet.

                  Bis demnächst
                  Matthias

                  --
                  Signaturen sind bloed (Steel) und Markdown ist mächtig.
                  1. Hi Matthias,

                    Dann schau doch mal, welche Parameter attr() erwartet.

                    Du hast recht. Aber leider hat auch

                    $('#sort').attr('id','sort2'); 
                    

                    nicht zum Ergebnis, dass meine tbodys unsortierbar sind.

                    Wenn ich

                    	$('table').attr('id','sort2'); 
                    	alert($('table').attr('id'));
                    

                    nehme, wird mir tatsächlich die neue ID "sort2" ausgegeben.

                    Trotzdem bleiben seltsamerweise meine tbodys sortierbar...

                    Verstehe ich nicht...

                    Jonny

                    1. Hallo,

                      Trotzdem bleiben seltsamerweise meine tbodys sortierbar...

                      alternativvorschlag: wenn du an die entsprechenden Buttons, Pfeile oder was auch immer die Sortierfunktion auslöst, rankommst und ausblendest?

                      Gruß
                      Kalk

                      1. alternativvorschlag: wenn du an die entsprechenden Buttons, Pfeile oder was auch immer die Sortierfunktion auslöst, rankommst und ausblendest?

                        Ich verwende da einfach UI sortable

                        Meine Ursprungsidee war ja, per JS-Funktion eine andere JS-Funktion ein- bzw. ausschalten zu können. Hab aber nicht gefunden, wie ich das machen kann...

                        Jonny

                        1. Tach!

                          Du möchtest also die Sortierbarkeit ein- und ausschalten.

                          Ich verwende da einfach UI sortable

                          Wenn du ein Zeitungsabonnement loswerden willst, kannst du deinen Namen ändern, auf dass dann das Abo ins Leere läuft, weil der Zusteller deinen Briefkasten nicht mehr findet. Mal ganz abgesehen davon, dass das Abonnement damit nicht zu Ende ist und im Hintergrund rumzuwerkeln versucht.

                          Derselbe Trick klappt aber nicht, wenn du ein Kleidungsstück ausziehen willst. Dieses ist nämlich nicht mit deinem Namen verbunden sondern mit deinem Körper.

                          So weist man das Sortable-Widget einem Element zu:

                          $('#bezeichner').sortable();

                          Der Bezeichner wird nur dazu verwendet, das Element zu finden. Das Widget hängt sich nun an das Element. Es ist keinesfalls so, dass das Widget nun jedes Mal neu das Element sucht, wenn es damit etwas tun möchte. Das geht auch nicht, weil beispielsweise Event-Handler nicht am Widget sondern am Element hängen.

                          Du musst also nicht am Element rumfummeln, sondern dem Widget erzählen, dass es seine Arbeit einstellen soll. Laut dessen Dokumentation kennt es dazu disable und enable.

                          Meine Ursprungsidee war ja, per JS-Funktion eine andere JS-Funktion ein- bzw. ausschalten zu können. Hab aber nicht gefunden, wie ich das machen kann...

                          Sowas geht nicht. Funktionen sind da oder nicht. Sie sind aber nicht da und tun nichts, wenn man sie aufruft. Wenn man ihre Arbeit nicht haben möchte, muss man ihren Aufruf verhindern. Oder die Funktion beendet sich selbst sofort. Oder man entfernt die Referenz auf die Funktion und ersetzt sie mit einem Dummy. Das setzt jedoch voraus, dass die Funktion über eine Referenz aufgerufen wird und nicht über ihren Namen. - Das ganze Ansinnen kannst du aber vergessen, wenn du sowas wie das Sortable-Widget verwendest, dessen Code du nicht ändern möchtest. Da bleibt dir nur, in die Dokumentation zu schauen, ob dein Anliegen mit irgendeinem Parameter steuerbar ist oder mit einem Methodenaufruf ausgelöst werden kann.

                          dedlfix.

                          1. Hallo dedlfix,

                            Du musst also nicht am Element rumfummeln, sondern dem Widget erzählen, dass es seine Arbeit einstellen soll. Laut dessen Dokumentation kennt es dazu disable und enable.

                            Wahnsinn! "works like a charm", wie man so schön sagt! Vielen Dank für Deinen Hinweis und die Erklärung.

                            Das Widget läßt sich so tatsächlich ein- und ausschalten. Klasse!

                            Danke, Jonny

                    2. Hallo,

                      ich weiß jetzt nicht wie der jQuery-Tabellensortierer arbeitet, da musst du schon einen Blick in die Doku werden, vor allem weil du ja das Defaultverhalten ändern willst.

                      Daher von mir nur eine Idee, wie es gehen könnte: Der Sortieren gibt nach dem Laden der Seite "irgendwelchen" Elementen, z.B. den Spaltenüberschriften einen onclick-Handler, der die Sortierung auslöst. Wenn du nachträglich irgendwelche IDs oder Klassen änderst, bringt das wahrscheinlich nichts. Du musst den/die onclick-Handler entfernen, und dann kann auch nicht mehr sortiert werden, oder noch besser, du unterlässt die Initialisieren der Sortierung.

                      Gruß Jürgen

                      1. Hi Jürgen,

                        Daher von mir nur eine Idee, wie es gehen könnte: Der Sortieren gibt nach dem Laden der Seite "irgendwelchen" Elementen, z.B. den Spaltenüberschriften einen onclick-Handler, der die Sortierung auslöst. Wenn du nachträglich irgendwelche IDs oder Klassen änderst, bringt das wahrscheinlich nichts. Du musst den/die onclick-Handler entfernen, und dann kann auch nicht mehr sortiert werden, oder noch besser, du unterlässt die Initialisieren der Sortierung.

                        Guter Ansatz, klingt logisch für mich. Ich werde mal mit Hundi Gassi gehen und darüber nachdenken, wie ich das anstellen kann.

                        Jonny

                    3. Hallo Regenbogenjonny,

                      Trotzdem bleiben seltsamerweise meine tbodys sortierbar...

                      Wahrscheinlich werden einige Eventhandler registriert, die sich nicht darum scheren ob neue Elemente hinzukommen oder einige nicht mehr zur Ursprungsmenge gehören sollen.

                      Bis demnächst
                      Matthias

                      --
                      Signaturen sind bloed (Steel) und Markdown ist mächtig.
            2. @@Regenbogenjonny

              Deshalb dachte ich mir, dass ich der Tabelle mit der ID "sort" schlicht eine andere ID verpasse.

              Falsch gedacht. Es können sich Eigenschaften (Klassen, Attribute) eines Elements ändern, aber die Identität eines Elements sollte sich nicht ändern.

              Analog: Durch Änderung der Eigenschaft „Geschlecht“ vom Wert „Mann“ zu „Frau“ und der Eigenschaft „Vorname“ von „Bradley“ zu „Chelsea“ ändert sich auch nicht die Identität der Person Chelsea Mannings.

              LLAP 🖖

              --
              Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
              1. @@Gunnar Bittersmann

                Falsch gedacht …

                Anders gesagt: "sort" sollte keine ID einer Tabelle sein, sondern eine Klasse. Die ID einer Tabelle sollte deren Daten benennen.

                LLAP 🖖

                --
                Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                1. Tach!

                  Anders gesagt: "sort" sollte keine ID einer Tabelle sein, sondern eine Klasse. Die ID einer Tabelle sollte deren Daten benennen.

                  Das ist aber nur ein Nebenkriegsschauplatz der Marke "bessere Code-Verständlichkeit". Am eigentlichen Problem löst das gar nichts, weil es egal ist, ob man jemandem eine andere Identität verpasst oder eine Eigenschaft ändert, wenn das eigentlich zu ändernde mit dessen Körper verbunden ist. Mehr dazu in meiner anderen Antwort.

                  dedlfix.

                  1. @@dedlfix

                    Das ist aber nur ein Nebenkriegsschauplatz der Marke "bessere Code-Verständlichkeit".

                    Ich würde sagen: ein Hauptkriegsschauplatz der Marke „bessere Problem-Verständlichkeit“. Oder allgemein „bessere Programmier-Verständlichkeit“.

                    wenn das eigentlich zu ändernde mit dessen Körper verbunden ist.

                    Eben das ist die Identität: „mit dem Körper verbunden“.

                    LLAP 🖖

                    --
                    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                    1. Tach!

                      wenn das eigentlich zu ändernde mit dessen Körper verbunden ist.

                      Eben das ist die Identität: „mit dem Körper verbunden“.

                      Nein, das ist bei dem Problem des OP das Sortable-Widget. Das id-Attribut der Tabelle spielt überhaupt keine Rolle, das könnte auch ganz abwesend sein.

                      dedlfix.

                      1. Nein, das ist bei dem Problem des OP das Sortable-Widget. Das id-Attribut der Tabelle spielt überhaupt keine Rolle, das könnte auch ganz abwesend sein.

                        Das ist richtig. Ich könnte es immer noch über $('table').sortable... ansprechen.

                        Jonny

                      2. @@dedlfix

                        Nein, das ist bei dem Problem des OP das Sortable-Widget

                        Das wurde in dem anderen Subthread behandelt.

                        Mir ging es in diesem Subthread um den Aspekt, niemals die ID eines Elementes zu ändern.

                        Der Prüfer bei der HU oder der Polizist bei der Verkehrskontrolle wären auch not amused, wenn du beim Auto die Fahrgestellnummer rausflexen und eine andere reinmeißeln würdest.

                        LLAP 🖖

                        --
                        Ist diese Antwort anstößig? Dann könnte sie nützlich sein.