is visible funktioniert nicht recht
Regenbogenjonny
- javascript
- jquery
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
Verhält sich eine Tabellenzeile anders?
Gelöst, war ein Tipfehler drin... Jonny
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
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
$('[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
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
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
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
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
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
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
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
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.
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
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
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
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
@@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 🖖
@@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 🖖
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.
@@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 🖖
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.
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
@@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 🖖