2017-04-11 4 views
1

Ich versuche, ein Währungsfeld programmatisch zu aktualisieren, um das Wertänderungsereignis auszuführen, das eine numerische Berechnung enthält. Ich möchte, dass der Wert auf Null gesetzt wird.Ignite UI IgCurrencyEditor

$('.tester').igCurrencyEditor("setFocus"); 

$('.tester').igCurrencyEditor('option','value', 0); 

Dann, wenn ich Verwischen oder nicht sicher, was hier zu tun ist, das valueChanged Ereignis gemäß der API-Dokumentation auslösen soll (Es kann auf dem Fokus verloren oder auf Spin-Ereignissen ausgelöst werden).

Aber ich kann nicht scheinen, das Wert geändert Ereignis auszulösen, es funktioniert nur, wenn ich manuell in die Eingabe klicken und die Nummer ändern.

+0

Was die Version von Ignite UI ist dass du benutzt? –

+0

Könnten Sie die Frage auch mit Ihrer Editorkonfiguration aktualisieren? –

+0

Ich verwende Version 2015,2 .. meine Konfiguration ist wie folgt 'tt.igCurrencyEditor ({ Wert: sel, currency: "£", valuechanged: function (evt, ui) {// mein Code hier um Berechnungen auszulösen }}); ' – Michaelh

Antwort

3

Die valueChanging und valueChanged Ereignisse auslösen würde, wenn ein Benutzer die Interaktion displayInput Wert des Editors ändert, und der entsprechende Wert valueInput unterscheidet sich von der Anzeigeeingabe ein. Die Editoren haben denselben Ansatz wie alle anderen Ignite UI-Steuerelemente, bei denen Ereignisse bei API-Aufrufen nicht ausgelöst werden, da der Entwickler bei einem API-Aufruf auswählen kann, ob er nach dem API-Aufruf seinen Ereignishandler aufrufen möchte oder nicht.

Es gibt zwei Dinge, die Sie tun können, um Ihren Event-Handler aufzurufen. Erstens ist die Event-Handler-Methode cachen und rufen Sie es manuell:

$('.tester').igCurrencyEditor({ 
    ... 
    valueChanged: valueChanged, 
    ... 
}); 

function valueChanged(event, ui) { 
    // event handler 
}; 

$('.tester').igCurrencyEditor("setFocus"); 
$('.tester').igCurrencyEditor('option','value', 0); 
valueChanged(null, { /* if you need arguments */ }); 

Das zweite ist die Währung Editor zu erweitern und die Methode überschreiben, die die Prüfung, ob diese Ereignisse führt ausgelöst werden soll, und machen es immer Trigger die Ereignisse:

$.widget("ui.igCurrencyEditorExtension", $.ui.igCurrencyEditor, { 
    _processValueChanging: function (value) { 
     this._triggerInternalValueChange(value); 
    } 
} 

der zweite Ansatz erfordert, dass Sie wechseln die igCurrencyEditorExtension zu verwenden und kann Nebenwirkungen haben, wie das Verfahren auch andere Kontrollen durchführt.

Anyways, was Alex Marinov hat, sollte vorgeschlagen arbeiten, aber es hängt von Ihrem Editor Konfiguration, je nachdem, ob Sie haben festgelegt Nullvalue, erlauben Nullwerte im Editor usw.

+0

Hallo, wenn ich versuche, eine Funktion an die Methode Wert geändert, wenn ich die Funktion triggern, Ereignis ist Null und Ui ist undefiniert, Zum Beispiel Ich habe diese 'ValueChanged = Funktion (Ereignis, ui) { var newvalue = ui.newValue; ' newValue ist undefined .. – Michaelh

+0

Kann ich in der UI an die Funktion übergeben? 'valueChanged (null, was auch immerUi)'? Wenn dies von meiner Klick-Funktion aufgerufen wird, muss ich einen Wert übergeben, aber ich habe die Zieleingabe mit 'var s = ui.editorInput [0]; var tt = $ (s); 'um ein jquery-Attribut anzusteuern..auf den vom Benutzer geänderten Wert. – Michaelh

+0

Sie können. Sie rufen die Methode auf, so dass Sie beliebige Argumente setzen können. Sie können Ihre Methode sogar erkennen lassen, wenn Sie sie im zweiten Argument manuell aufgerufen haben, wie im Set '{manual: true}', und dann die Überprüfung wie folgt durchführen: if (ui.manual) '. Sie setzen den neuen Wert auf "0", also übergeben Sie einfach "{newValue: 0}". –

3

benötigen Sie eine Funktion wie folgt aus:

function clearValue() { 
    $('.tester').igCurrencyEditor('option','value', ""); 
    $('.tester').igCurrencyEditor('field').blur(); 
} 

Das Ergebnis wird sein, dass der angezeigte Wert innerhalb des Währungs Editor ist „$ 0.00“ und die valuechanged Ereignis ausgelöst wird.

+0

Leider funktioniert das nicht, anscheinend ist es einfach nicht möglich, das Ereignis programmatisch zu feuern, was ich für verrückt halte! Ich öffnete einen Fall und ein Snippet ihrer Antwort war dies *** "Ich habe eine erste Überprüfung Ihres Falles und das Ereignis nicht ausgelöst, wenn die API verwendet wird, um den Wert oder etc, die normalerweise auslösen würde Die Ereignisse werden nur ausgelöst, wenn das Steuerelement über die Benutzeroberfläche interagiert. "*** – Michaelh

+0

Schauen Sie sich dieses Beispiel an: https://jsfiddle.net/gbnomw5a/4/ Dies funktioniert jedoch nur, wenn Sie '' Lösche den Wert im Editor.Wenn Sie versuchen, einen anderen Wert festzulegen, wird das Ereignis nicht ausgelöst. Wenn dies der Fall ist, werfen Sie einen Blick auf die Antwort, die Konstantin Dinev unten gegeben hat. –

+0

Das würde in der Theorie funktionieren, aber ich muss mein Klickereignis über '$ (Dokument) .on ('click')' Ich versuchte diese Methode mit dem Funktionsaufruf innerhalb, aber es hat nicht ausgelöst, klicken Sie auf das Ereignis für die WährungEditor. – Michaelh