• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Greasemonkey Script welches Auswahlfelder nachwunsch ausfuellt

monkey089

New member
Hallo zusammen,

nun brauche ich doch einen Rat.

Ich moechte auf einer Seite, ist eine Interne Firmen Seite, in dieser man u.a. Bestellungen eintragen kann, Auswahlfelder auswaehlen.
Um eine Bestellung einzutragen klickt man auf einen Link, es oeffnet sich ein Overlay Fesnter (hoffe so heisst es wirklich) in diesem man die Daten der Bestellung eintraegt.

Nun muss dies sehr oft am Tag gemacht werden.
Und eigentlich zu 95% braucht ich bestimmte Felder (DropDown Auswahlmenue) nach dem gleichen prinzip ausgefuellt/ausgewaehlt.

Soweit waere es auch kein Problem. Habe fuer mich schon folgendes raus gefunden ...
document.forms[1].documentation.selectedIndex = 1;
dies aendert ein Feld, welches ich aendern moechte.

Mein Problem aber ist ... Die Profis koennen mehr als ich damit anfangen ...

<a href="#" onclick="Orders.openForm();return false;">Bestellung <span class="ss_sprite ss_add"> </span></a>

... damit oeffne ich eben besagtes Overlay Fenster.

Ich gehe nun davon aus, ich bin wie gesagt kein Profi.
Das Greasemonkey beim oeffnen der Hauptseite das Script ausfuehrt, zu dieser zeit ist eben die Overlay (Bestelleingabe Seite) nicht sichtbar, auch nicht im Quelltext. Diese wird eben erst mit klicken auf den Link ganz am Ende der Seite, nach ::afert, nachgeladen.

Getestet habe ich dies mit einer Zeitverzoegerung...
window.setTimeout(function() { document.forms[1].documentation.selectedIndex = 1 }, 1800);

Lade ich die Seite Neu und klicke schnell auf den Link, klappt es.
Nur ist dies aber keine Loesung. Wie kann man dies am besten bewerkstelligen? Also das die aenderung erst nach dem klick auf den Link aktiv wird.

Vielen Dank und viele Gruese
monkey
 
Zuletzt bearbeitet von einem Moderator:
Wie kann man dies am besten bewerkstelligen? Also das die aenderung erst nach dem klick auf den Link aktiv wird.
Du müsstest auf dem <a> einen click-Eventlistener registrieren, der dann (wahrscheinlich am Besten nach einem kleinen Timeout) die Änderungen durchführt.

Wie du eindeutig an das <a> kommst, kann ich dir nicht sagen, da das von der HTML-Struktur des Dokuments abhängt.
 
Hallo kkapsner,

danke fuer den loesungsvorschlag.
Habe schon in richtung "click-Eventlistener" gesucht, sollte wirklich das richtige sein, oder jedenfalls schon mal ein loesungsweg.

Wie du eindeutig an das <a> kommst, kann ich dir nicht sagen, da das von der HTML-Struktur des Dokuments abhängt.

Code:
<body>
	<div class="container">
		<div class="span-24">
		
		.... SONSTIGES ....
		
		<table class="bottom">
			<tbody>
				<tr>
					<td>
					<h2>Bestellungen</h2>
					</td>
					<td class="noprint aright">
						<span class="quiet small">Suchen: </span>
						<input name="tableOrdersLiveSearch" id="tableOrdersLiveSearch" maxlength="255" class="textlivesearch" type="text">
						   
						|   <a href="/Bestellung.html?task=orders.downloadFile&type=ods">XLSX <span class="ss_sprite ss_printer"> </span></a>
						|   <a href="#" onclick="tableOrdersData.loadAJAX(true);return false;">Reload <span class="ss_sprite ss_arrow_refresh_small"> </span></a>
						|   [B]<a href="#" onclick="Orders.openForm();return false;">Neue Bestellung <span class="ss_sprite ss_add"> </span></a>[/B]
						|   <a href="/Bestellung/grafik.html">Grafik<span class="ss_sprite ss_chart_bar"> </span></a>
						|   <a href="#" onclick="GApp.Help.open('orders');return false;"> <span class="ss_sprite ss_help"> </span></a>
					</td>
				</tr>
			</tbody>
		</table>

		.... SONSTIGES ....

		</div>
	</div>
</body>

Koennte ich, da wie man sieht auf dem Weg keine feste id vorhanden ist, folgendermassen vorgehen...
Suche das <a> unter...

<body>, <div>, <div>, <table>, <tbody>, <tr>, 2te <td>, 3tes <a>.

Nur dabei brauche ich wieder einmal hilfe, oder einen Link der solch ein Problem beschreibt, dann koennte ich auch darauf kommen.
Bisher habe ich einen groben ansatzpunkt, aber weiss nicht nach was ich genau Suchen muss.
Es ist zwar warscheinlich eine einfache/simple Funktion, aber gerade komme ich auf nichts passendes.

Jeder hinweiss ist willkommen.

Vielen Dank nochmals.
 
Du müsstest auf dem <a> einen click-Eventlistener registrieren, der dann (wahrscheinlich am Besten nach einem kleinen Timeout) die Änderungen durchführt.

Wie du eindeutig an das <a> kommst, kann ich dir nicht sagen, da das von der HTML-Struktur des Dokuments abhängt.


Hallo kkapsner,

danke für dein Feedback, leider ist mein zweiter gestriger Post gar nicht eingestellt worden.
Aber auch gut so, da ich selbst mit ein wenig Probieren und natürlich deinem Denkanstoss an eine Lösung kommen konnte. Wenn auch erst einmal Provisorisch.

Code:
document.getElementsByTagName('a')[55].addEventListener("click", function(){
  window.setTimeout(function() { 
    document.forms[1].documentation.selectedIndex = 1
    document.forms[1].import_type.selectedIndex = 1
    document.forms[1].treated_as_cargo.selectedIndex = 1
  }, 1800);

Ich weiss, "document.getElementsByTagName('a')[55]" ist suboptimal, erst einmal reicht es, später kann ich nach einer besseren lösung schauen.

----

Nun habe ich noch ein anderes Problem, was sich gerade raus gestellt hat...


Diesen Teil kann ich mit "document.forms[1].treated_as_cargo.selectedIndex = 1" passend abändern.

HTML:
<p style="text-align: right;" class="bottom">Ladung
	<select name="treated_as_cargo" class="text"><option value="0">Nein</option><option value="1">Ja</option></select>
</p>

Nun komme ich hier zu einem weiteren Problem. Ändere ich dies per Script, so übernimmt er nicht die Funktion, das dass kommende Auswahlfeld das "hidden" verschwindet.

Mein Problem ist hier, wie kann ich das "class" ansteuern und das "hidden" entfernen?
Als Einstiegspunkt kann ich -name="production_apart"- nehmen, von da an müsste ich sagen, gehe zu dem darüberlig <p> und änder/lösche das class/hidden.

HTML:
<p style="text-align: right;" class="bottom [B]hidden[/B]">Spezielle Bestellung
	<select name="production_apart" class="text toHide"><option value="0">Nein</option><option value="1">Ja</option></select>
</p>

Hier ist auch zu sehen, warum "document.getElementsByTagName('a')[55]" so aussieht, da habe ich noch nicht so den durchblick wie man richtig damit arbeitet.

Könnte mir da jemand nochmals hilfestellung geben


Viele Grüsse und besten Dank
 
Hallo zusammen,

nun mein dritter und letzter Eintrag (Versuch).

Code:
document.getElementsByTagName('a')[55].addEventListener("click", function(){
  window.setTimeout(function() { 
    document.getElementById("client_id").innerHTML = "<option value=\"\"></option><option value=\"2\" selected=\"selected\">Kunde</option>"
    document.getElementById("select2-client_id-container").innerHTML = "<span class=\"select2-selection__clear\">×</span>Kunde"
    document.getElementById("select2-client_id-container").title = "Kunde"
    document.forms[1].documentation.selectedIndex = 1
    document.forms[1].import_type.selectedIndex = 1
    document.forms[1].treated_as_cargo.selectedIndex = 1
    document.getElementsByName("production_apart")[0].parentElement.className ="bottom";
    document.getElementsByName("virtual_production")[0].parentElement.className ="bottom";
    document.forms[1].production_apart.selectedIndex = 0
    document.forms[1].virtual_production.selectedIndex = 2
  }, 1800); 
});

Ein wenig rumprobieren und ich konnte was ich wollte umsetzen.
Dies hier wird wohl wenigen Helfen, aber vielleicht dient es dem ein oder anderen als Beispiel.


Ein Problem ist noch offen, wo ich aber selbst zu keiner richtigen Lösung komme...
Code:
document.getElementsByTagName('a')[55].addEventListener("click", function()
Wie man sehen kann, bin ich nur temporär zu einer Lösung gekommen. Sobald aber an der Seite änderungen vorgenommen werden, könnte es sein das es dann nicht mehr Funktioniert...

HTML:
<body>
	<div class="container">
		<div class="span-24">
			<hr class="space" />
			<table class="bottom" >
				<tr>
					<td><h2>Bestellungen</h2></td>
					<td class="noprint aright">
						<span class="quiet small">Auswahl: </span>
						<input type="text" name="tableOrdersLiveSearch" id="tableOrdersLiveSearch" maxlength="255" class="textlivesearch" />
						   |   <a  href="/bestellung.html?task=orders.downloadFile&type=ods" >XLSX <span class="ss_sprite ss_printer"> </span></a>
						|   <a  href="#" onclick="tableOrdersData.loadAJAX(true);return false;" >Ladung <span class="ss_sprite ss_arrow_refresh_small"> </span></a>
						|   <a  href="#" onclick="Orders.openForm();return false;" >Neue Bestellung <span class="ss_sprite ss_add"> </span></a>
						|   <a  href="/bestellung/auswertung.html" >Auswertung <span class="ss_sprite ss_chart_bar"> </span></a>
						|   <a  href="#" onclick="GApp.Help.open('orders');return false;" > <span class="ss_sprite ss_help"> </span></a>
					</td>
				</tr>
			</table>
		</div>
	</div>
</body>

Dies ist der Abgespeckte Quellcode. Kann mit da jemand helfen, wie man RICHTIG an die richtige stelle kommt. Sollte das 3te <a> sein.

Viele Grüße
 
Zurück
Oben