Laden...

Problem mit JavaScript / Events

Erstellt von maltek vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.627 Views
M
maltek Themenstarter:in
40 Beiträge seit 2010
vor 11 Jahren
Problem mit JavaScript / Events

Hallo,
ich habe da ein Problem mit JavaScript. Bisher hatte ich keinerlei Erfahrung auf diesem Gebiet, habe mich erst heute ein wenig eingelesen.
Folgendes: ich habe (auf einer .aspx) eine Reihe von Checkboxen, bei einem Klick wird die JS-Funktion "checkbox_onClick" ausgeführt. Hier wird dann wiederum der Klickevent für einen Button gesetzt.

function checkbox_onClick(checked)
{
document.getElementById("btnMail").onclick = Popup(123456);
};

function Popup(belegnummer)
{
window.open(…);
return false;
}
.
Das Problem ist nun, das jedes Mal beim ändern der Checkbox, die Funktion Popup aufgerufen wird. Das sollte doch eigentlich nur passieren wenn auf den Button geklickt wird?!

T
2.221 Beiträge seit 2008
vor 11 Jahren

Wenn der Button btnMail dort fest ist dann kannst du auch in die OnClientClick Eigenschaft den Code für deinen Javascript aufruf einbauen oder wird das ganze dann dynamisch generiert?

Zu dem Problem selbst:
Es klingt so als würde dein Button aus irgend einem Grund einen Postback auslösen.
Dann wäre klar, dass der ggf. die Javascript Funktion aufruft.

Nachtrag:
Etwas mehr Code oder ein genauerer Ablauf könnte helfen das Problem zulösen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

114 Beiträge seit 2009
vor 11 Jahren

Also ich würde hier in eine andere Richtung als T-Virus forschen. Ich glaube nicht, dass du den Event onClick in JS wie ein Attribut befüllen kannst. Das was hier wahrscheinlich passiert: Popup wird ausgelöst und die Rückgabe in onClick eingefügt. Der Klick auf deinen Button funktioniert dann wahrscheinlich nicht, weil onClick einfach mit false befüllt wird.

Ich würde dir für solche Aufgaben JQuery empfehlen. Da sieht das mit dem Anmelden des Events dann so aus.

$('#btnMail').click(Popup(123));

EDIT:
Du könntest alternativ auch das hier versuchen:

document.getElementById("btnMail").onclick = function (){Popup(123);};

Aber wie gesagt: JQuery rocks! 😉

3.170 Beiträge seit 2006
vor 11 Jahren

Hallo,

der eigentliche Gruind für das Problem ist - wie Levion bereits schrieb - folgender:

Normalerweise weist man einem onclick-Event eines Buttons einfach nur eine Funktion als Handler zu. Dabei kann man dann allerdings noch keine Parameter übergeben. Also z.B.

document.getElementById("btnMail").onclick = Popup; 

Du rufst die Funktion Popup aber bereits auf, und weist dann dem onclick-Event des Buttons das Ergebnis (den Rückgabewert) dieses Aufrufs zu.
Und der Aufruf wird dann natürlich in jedem checkbox_onClick ausgeführt.

Die Lösung hat Levion bereits genannt: Kapsele einfach Deinen Aufruf in eine neue Funktion, und weise die als Eventhandler zu.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
maltek Themenstarter:in
40 Beiträge seit 2010
vor 11 Jahren

Danke erst mal für die Antworten.

"Das was hier wahrscheinlich passiert: Popup wird ausgelöst und die Rückgabe in onClick eingefügt."
Genau das war der Fall. Ich arbeite jetzt wie empfohlen mit: "$('#btnMail').click(Popup(123));". Leider besteht das Problem weiterhin.

Im Debugger kann ich ganz gut nach verfolgen das direkt die Popup() aufgerufen wird. 🙁

Ich füge die Checkboxen dynamisch im OnDataBound-Event meines GridViews hinzu:


                        //Checkbox hinzufügen--->                        
                        CheckBox checkVersand = new CheckBox();
                        checkVersand.ID = "check" + getBelegnummer(_arow.RowIndex); //ID auf die aktuelle Belegnummer setzen                        
                        checkVersand.Attributes["onClick"] = "checkbox_onClick()"; 
                        checkVersand.AutoPostBack = false;
                        TableCell _send = new TableCell();
                        _send.Controls.Add(checkVersand);
                        _newrow.Cells.Add(_send);
                        //<--- Checkbox hinzufügen

Wie gesagt, "checkbox_onClick()" wird dann auch aufgerufen.

Wenn ich den JS-Code in ein $(document).ready(function() { });
Tag packe bekomme ich die Fehlermeldung: Unterbrechung bei JS-Laufzeitehler - Der Wert der Eigenschaft checkbox_onClick() ist Null oder undefiniert, kein Function-Objekt.
<td>
<input id="check2262137542" type="checkbox" name="check2262137542" onclick="checkbox_onClick();" />
</td>

16.825 Beiträge seit 2008
vor 11 Jahren

Natürlich besteht das Problem weiterhin. Du machst den gleichen Quatsch ja immer noch.

"$('#btnMail').click(Popup(123));".

Du weist der Click-Funktion die RÜCKGABE des Popups zu.
Mach das, was MarsStein Dir erklärt hat. Handler zuweisen!

114 Beiträge seit 2009
vor 11 Jahren

Ups, daran bin ich mitschuld.

Ich meinte:


$('#btnMail').click(function(e){
  Popup(123);
});

Gruß