event.preventDefault() funktioniert nicht
habe ich diese Zeile von code in meine view mit dem Telerik Grid:
columns.Bound(o => o.URI).Width(10).Sortable(false)
.ClientTemplate("<A class='btnGrid' id=source<#= ID #> onclick=GridSelection.addItem('<#= ID #>') >Add</A>").Title("").Width(50);
den GridSelection addItem und disableSelected Funktionen' JS-codes:
GridSelection = {
addItem: function (value) {
var anchorOption = $("a[id=source" + value + "]");
anchorOption.click(function (e) { //variable name changed from "event"
e.preventDefault();
return false; //as suggested by mr. Hamdi
});
anchorOption.fadeTo("slow", .5);
GridSelection.disableSelected(anchorOption, true);
var data = $("#GridSource").data('tGrid').data;
var selectedObject;
for (var item in data) {
if (data[item].ID == value) {
selectedObject = data[item];
break;
}
}
var grid = $("#GridSelected").data('tGrid');
var newData = $("#GridSelected").data('tGrid').dataSource._data;
newData.push(selectedObject);
grid.dataBind(newData);
grid.sort("");
anchorOption.fadeTo("slow", .5);
},
disableSelected: function (element, disable) {
//false on IEs 6, 7 and 8
if (!$.support.leadingWhitespace) {
if (disable) {
$(element).attr('disabled', 'disabled');
} else {
$(element).removeAttr('disabled');
}
}
},
//other GridSelection subfunctions here...
Als ich das MVC3 web app in Internet Explorer läuft es gut, weil der GridSelection.disableSelected Funktion, aber in Chrome und Mozilla Firefox, die event.preventDefault();
funktioniert nicht. Der Anker-link fügt noch die Daten posten, auch nachdem der Benutzer bereits Hinzugefügt, die es gibt.
Ist es OK, dass die preventDefault
- Methode innerhalb der GridSelection.addItem
Funktion, hinderte?
Welches Attribut wird verhindert durch die preventDefault
ist es die href oder ist es die onclick?
Was falsch mit diesem?
Wie kann ich diesen Fehler beheben kann?
Wer kann helfen?
anchorOption.fadeTo("slow", .5);
Arbeit?Das ist auch einer meiner Impulse. Ich habe hier eine Developer-Tools app, welches ich in meine app Debuggen. Ich habe Haltepunkte auf der code-Zeilen der Scripte zu wissen, ob es an diese Zeilen und es tut.
sehen Sie bitte meine zusätzlichen Fragen in meinem editierten post. Dank
Haben Sie überprüft, Fehler-Konsole in Mozilla ? Gibt es irgendwelche Fehler? Hinzufügen Sie können alert-Zeile vor
e.preventDefault();
um sicherzustellen, dass die Funktion aufgerufen wird.Haben Sie vergessen, hinzuzufügen Semikolon nach
return false
. Es sollte keine Fehler geben, aber einen Versuch Wert.InformationsquelleAutor ideAvi | 2012-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den markup-Code für Ihren link ein inline-Klick-Prozedur und keine
href
:Wenn es die
GridSelection.verify()
, dass du versuchst zu verhindern, sollten Sie beachten, dass:e.preventDefault()
hört nicht auf andere Handler ausgeführt wird, beendet Sie die Standardaktion für das Ereignis, das für ein link ist, navigieren Sie zu der url angegeben, in derhref
Attribut. Und Sie don ' T geben Sie einehref
.Wenn Sie möchten, um mehrere Handler für dasselbe Ereignis auf das gleiche element, das Sie zuordnen sollten Sie alle mit jQuery in der von Ihnen gewünschten Reihenfolge aufgerufen werden, und verwenden Sie dann die
- Ereignis.stopImmediatePropagation()
Methode innerhalb eines Handler, wenn Sie möchten, stoppen Sie den rest von Ihnen ausgeführt werden.Ich weiß nicht, wie zu passen, dass in dem code, den Sie gezeigt haben, da Sie zeigen nicht Teil des Codes, den Sie verhindern möchten, aber das generelle Prinzip ist:
Nachdem alles gesagt, dass, wenn die
.verify()
Funktion ruft Ihre.addItem()
Funktion, und es ist Ihre Absicht, zu verhindern, dass Zukunft klicken Sie auf Ereignisse auf den gleichen link, da der erste Klick sollte überprüfen/hinzufügen und dann wollen Sie nicht in der Lage sein, um Sie erneut auf hinzufügen, dann in Ihrem.addItem()
Funktion etwas wie das hier tun:preventDefault()
? sollte ich legte es in die.addItem()
noch? oder sollte ich es in einem anderen event-handler außerhalb der.addItem()
?Mit der aktualisierten version der Frage, ich würde sagen, Sie wollen nicht
preventDefault()
oderstopImmediatePropagation()
überhaupt, noch sollte Sie werden, die Schaffung einesclick
- handler imaddItem()
wie Sie derzeit tun, weil das hilft nicht. Versuchen Sie, den code aus der ganz am Ende meiner Antwort und sehen, was passiert - die Idee ist, "ausschalten", die klicken Sie auf handler gesetzt wurde, mit den inline -onclick
- Attribut in den html-Code.InformationsquelleAutor nnnnnn
Haben Sie versucht, indem
return false;
stattevent.preventDefault();
return false;
Anweisung nachevent.preventDefault();
. Sie nicht brauchen, zu löschenevent.preventDefault();
Danke, ich habe versucht, indem es mit meinem code, aber immer noch, es ändert nichts.
Das ist wirklich seltsam. Ich konfrontiert mit dem gleichen problem vor und return false; für mich gearbeitet.
bitte Lesen Sie meinen post aktualisiert. Ich habe paar Fragen die mich stören, vielleicht könnte Sie mir helfen, Ihnen Antworten.
InformationsquelleAutor Hamdi
Haben Sie versucht, die Umbenennung der Ereignis-variable? rufen Sie mich verrückt, aber ich glaube mich zu erinnern, dass Probleme nur versuchen
function(e) {e.preventDefault();}
und sehen, was passiert,ja. Danke, aber das war der erste name, den ich verwendet für die Ereignis-variable, und Es hat nicht funktioniert immer noch.
InformationsquelleAutor Mike L.
Wenn der Anker hat eine
id
mit dem id-Selektor, anstatt es als Attribut-Selektor.Ändern
Zu
Ich sage nicht, das ist das Problem, aber Sie können versuchen, ändern diese.
Update:
event.preventDefault()
beendet den browser, Folgen Sie dem link inhref
- Attribut anchor-element. Wird es nicht verhindern oder zu stoppen dieclick
Veranstaltung.Überprüfen Sie meine udpate.
InformationsquelleAutor ShankarSangoli