datadexx
Goto Top

Wie kann ich mit jquery einem input feld einen event mit einer Function hinzufügen?

Hallo zusammen,

leider finde ich nichts im Netz und probiert hab ich (meiner Meinung nach) auch bereits alles...

Folgendes Problem, ich habe ein Interface mit einem Formular wo ich mit jquery die POST Daten abfange und per ajax an ein anderes PHP Script weitergebe. Somit stehen mir die POST Daten im eigentlichen PHP Script nicht mehr zur Verfügung. Im Formular gibt es inputs (type text) die einen Event haben, z.B. onfocus="function x();". Ein select Feld im Formular feuert bei onchange das Formular ab und läd Daten nach. Wenn das select feuert und die Daten nachgeladen hat, benötige ich in den o.g. inputs[text] mit dem Event onfocus eine andere funktion, quasi onfocus="function y();".

Hatte eigentlich gedacht, das könnte ich mit .attr machen, also beim abfeuern des select ein $("#id des inputfeld").attr("onfocus","function xy()")... funktioniert aber leider nicht.

Wie kann ich das mit jquery setzen oder alternativ mir die POST Daten auch im Script trotz senden mit ajax verfügbar machen?

Danke für Hilfe!!!

Content-Key: 317733

Url: https://administrator.de/contentid/317733

Printed on: April 26, 2024 at 20:04 o'clock

Member: atze187
Solution atze187 Oct 13, 2016 updated at 13:43:39 (UTC)
Goto Top
Meines Erachtens können per Markup gesetzte Handler aus Sicherheitsgründen nicht per Skript entfernt werden. Per Skript würde das ganze so aussehen: Handler per Skript (er-)setzen

Den Teil mit den Post-Daten hab ich nicht verstanden. Nur weil du einen Ajax-Request absetzt sind die Daten doch nicht weg.
Member: datadexx
datadexx Oct 13, 2016 at 13:55:56 (UTC)
Goto Top
Hi atze,

ich werde das mal mit .bind checken.
Mit jquery preventDefault() wird ja das eigentliche absenden des Formulars und der reload der Seite verhindert. Deshalb stehen die Post Daten im Formular Script nicht zur verfügung...

Aber schon mal Danke!
Member: datadexx
datadexx Oct 13, 2016 at 15:11:14 (UTC)
Goto Top
Also das mit .bind funktioniert! THX! aber

wie kann ich denn in jquery abfragen ob was nicht passiert ist, z.B. in meinem Fall prüfen ob die Auswahl im select geändert wurde oder nicht.
Also quasi if (!$("#meineid").change()... ???

Danke für infos!
Member: atze187
atze187 Oct 13, 2016 at 15:30:06 (UTC)
Goto Top
Ich bin mir nicht sicher ob du die Eventhandler richtig verstehst. Der Alert im folgenden Beispiel wird zum Beispiel nur angezeigt wenn sich die Auswahl tatsächlich geändert hat:

$("#meineid").change(function()  {  
    alert('der wert von meineid hat sich geändert');  
});

Wenn man nichts anderes auswählt (egal ob per Code oder Benutzerinteraktion) wird auch nichts ausgeführt.
Member: atze187
atze187 Oct 13, 2016 at 15:31:47 (UTC)
Goto Top
Ich kann dir leider nicht folgen was dein Formularskript ist und wo die Daten nicht zur Verfügung. Das müsstest du mir bitte mal vortanzen.
Member: datadexx
datadexx Oct 14, 2016 at 08:22:31 (UTC)
Goto Top
Moin atze,

ich versuch es mal zu tanzen face-smile ...

Nach deinem Tipp von gestern mit .bind hab ich folgendes gemacht:

Direkt nach
$(document).ready(function(){...
binde ich an das input mit .bind die Funktion die ich beim Aufruf des Formulars benötige an das input mit
$("#meineid").bind("focus", function() {meineFunktion1(); });  
was auch super klappt. Wenn jetzt das select im Formular geändert wird fange ich das mit
$('#selectid').change(function() {  
ab. Hier mach ich dann ein .unbind
$("#meineid").unbind("onfocus");  
und möchte mit
$("#meineid").bind("focus", function() {meineFunktion2(); });  
die neue Funktion an das input binden. Aber das funktioniert leider nicht..., nach dem Ändern des select ist immer noch Funktion 1 an das input gebunden obwohl ja eigentlich Funktion 2 jetzt aktiv sein sollte...
Member: datadexx
datadexx Oct 14, 2016 at 08:33:39 (UTC)
Goto Top
Problem ist , das ich beim Ändern des select eine andere Funktion für onfocus auf dem input haben muss, da durch das Ändern des select andere Berechnungen durchgeführt werden müssen. Das Formular hat keine action="script..." Angabe, die Formulardaten werden mit
$('#formularid').submit(function(e){  
e.preventDefault();
$.post('pfadzumphpscript',$('#formularid').serialize(),function(msg){  
$('#iddesstatusdiv').html(msg);    

});
abgefangen und verarbeitet. Deshalb stehen mir die POST Variablen auch nicht Formularscript zur Verfügung, denn dann wäre das kein Problem die Geschichte in PHP zu erledigen.
Member: atze187
atze187 Oct 14, 2016 at 08:43:12 (UTC)
Goto Top
Im unbind müsste focus statt onfocus stehen.
Member: datadexx
datadexx Oct 14, 2016 at 08:45:02 (UTC)
Goto Top
Nachtrag:

Wenn ich die erste Bindung aus dem Script entferne, wird beim Ändern des select Funktion 2 auch an das input gebunden, deshalb war meine Frage von gestern ob es eine Möglichkeit gibt abzufragen ob eine Änderung stattgefunden hat um dann sagen zu können mache das erste .bind nur, wenn keine Änderung des select stattgefunden hat...
Member: datadexx
datadexx Oct 14, 2016 at 08:53:49 (UTC)
Goto Top
Hi atze,

hab ich geändert, funktioniert aber leider auch dann nicht
Member: atze187
atze187 Oct 14, 2016 at 09:13:10 (UTC)
Goto Top
Das kann ich nicht nachvollziehen. Da müsstest du wohl mal alle relevanten Html- und Skriptfragmente posten.
Member: datadexx
datadexx Oct 14, 2016 at 09:38:04 (UTC)
Goto Top
Hey Atze,

hat sich erledigt..., als ich gerade das komplette jquery posten wollte, viel mir auf (manchmal sieht man ja vor lauter Bäumen den Wald nicht mehr), das ich beim zweiten input nicht focus sondern blur verwende, da kann ja dann mit .unbind nichts passieren. Hab das geändert und siehe da es geht...
Schande über mein Haupt...

Vielen Dank an Dich und ein schönes Wochenende!!!