Javascript Ignite UI IgCurrencyEditor

Javascript Ignite UI IgCurrencyEditor,javascript,jquery,infragistics,ignite-ui,Javascript,Jquery,Infragistics,Ignite Ui,我试图以编程方式更新货币字段,以运行保存数值计算的值更改事件。我希望使用类似的方法将值设置为零 $('.tester').igCurrencyEditor("setFocus"); $('.tester').igCurrencyEditor('option','value', 0); 然后,当我模糊了,或者不确定在这里做什么时,valueChanged事件应该根据API文档触发,它可以在失去焦点或旋转事件时引发 但我似乎无法触发值更改事件,它只有在我手动单击输入并更改数字时才起作用。您需要这

我试图以编程方式更新货币字段,以运行保存数值计算的值更改事件。我希望使用类似的方法将值设置为零

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

$('.tester').igCurrencyEditor('option','value', 0);
然后,当我模糊了,或者不确定在这里做什么时,valueChanged事件应该根据API文档触发,它可以在失去焦点或旋转事件时引发


但我似乎无法触发值更改事件,它只有在我手动单击输入并更改数字时才起作用。

您需要这样的功能:

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

结果将是货币编辑器中显示的值为$0.00,并触发valueChanged事件。

您需要这样一个函数:

function clearValue() {
    $('.tester').igCurrencyEditor('option','value', "");
    $('.tester').igCurrencyEditor('field').blur();
}
结果将是货币编辑器中显示的值为$0.00,并触发valueChanged事件。

当用户交互更改编辑器的displayInput值时,将触发valueChanged和valueChanged事件,并且相应的valueInput值与display input值不同。编辑器采用了与所有其他Ignite UI控件相同的方法,在这些控件中,事件不会在API调用时触发,因为在执行API调用时,开发人员可以选择是否在API调用后调用其事件处理程序

您可以做两件事来调用事件处理程序。第一个是缓存事件处理程序方法并手动调用它:

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

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

$('.tester').igCurrencyEditor("setFocus");
$('.tester').igCurrencyEditor('option','value', 0);
valueChanged(null, { /* if you need arguments */ });
第二个是扩展currency editor并重写执行检查是否应触发这些事件的方法,并使其始终触发事件:

$.widget("ui.igCurrencyEditorExtension", $.ui.igCurrencyEditor, {
    _processValueChanging: function (value) {
        this._triggerInternalValueChange(value);
    }
}
第二种方法要求您切换到使用igCurrencyEditorExtension,并可能导致副作用,因为该方法还执行其他检查

无论如何,Alex Marinov的建议应该有效,但这取决于您的编辑器配置,取决于您是否在编辑器中设置了nullValue、允许null值等。

当用户交互更改编辑器的displayInput值时,将触发valueChanged和valueChanged事件,相应的值输入值与显示输入值不同。编辑器采用了与所有其他Ignite UI控件相同的方法,在这些控件中,事件不会在API调用时触发,因为在执行API调用时,开发人员可以选择是否在API调用后调用其事件处理程序

您可以做两件事来调用事件处理程序。第一个是缓存事件处理程序方法并手动调用它:

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

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

$('.tester').igCurrencyEditor("setFocus");
$('.tester').igCurrencyEditor('option','value', 0);
valueChanged(null, { /* if you need arguments */ });
第二个是扩展currency editor并重写执行检查是否应触发这些事件的方法,并使其始终触发事件:

$.widget("ui.igCurrencyEditorExtension", $.ui.igCurrencyEditor, {
    _processValueChanging: function (value) {
        this._triggerInternalValueChange(value);
    }
}
第二种方法要求您切换到使用igCurrencyEditorExtension,并可能导致副作用,因为该方法还执行其他检查


无论如何,Alex Marinov的建议应该是可行的,但这取决于您的编辑器配置,取决于您是否设置了nullValue,是否允许在编辑器中使用nullValue等等。

不幸的是,这不起作用,显然无法以编程方式触发事件,我认为这太疯狂了!我打开了一个案例,他们的回答是:我已经对您的案例进行了初步审查,当API用于设置通常会触发事件的值等时,不会触发事件。只有当控件通过UI进行交互时,才会触发事件。请看一下这个示例:但是,只有在清除编辑器中的值时,才会触发事件。如果尝试设置另一个值,则不会触发事件。如果这是您的情况,请查看Konstantin Dinev在下面提供的答案。这在理论上是可行的,但我必须通过$document绑定我的单击事件。“单击”时,我尝试了此方法,其中包含函数调用,但它没有触发CurrencyEditor的单击事件。不幸的是,这不起作用,显然,它只是不可能启动事件的编程,我认为这是疯狂的!我打开了一个案例,他们的回答是:我已经对您的案例进行了初步审查,当API用于设置通常会触发事件的值等时,不会触发事件。只有当控件通过UI进行交互时,才会触发事件。请看一下这个示例:但是,只有在清除编辑器中的值时,才会触发事件。如果尝试设置另一个值,则不会触发事件。如果这是你的情况,看看康斯坦丁·迪内夫在下面给出的答案。这在理论上是可行的,但是我必须通过$document绑定我的点击事件。在“点击”时,我尝试了这个方法,其中包含函数调用,但它没有触发CurrencyEditor的点击事件。您正在使用的Ignite UI的版本是什么?另外,您能用您的编辑器配置更新这个问题吗?我很抱歉
使用2015.2版。。我的配置如下:tt.igCurrencyEditor{value:sel,currencySymbol:£,valueChanged:function evt,ui{//my code in here to trigger calculations}};检查我给出的答案。您正在使用的Ignite UI版本是什么?另外,您是否可以使用编辑器配置更新该问题?我正在使用2015.2版。。我的配置如下:tt.igCurrencyEditor{value:sel,currencySymbol:£,valueChanged:function evt,ui{//my code in here to trigger calculations}};检查我给出的答案。嗨,当我尝试将一个函数传递给value changed方法时,当我触发该函数时,event为null,ui未定义,例如,我有一个ValueChanged=functionevent,ui{var newvalue=ui.newvalue;newvalue未定义..我可以将ui传递给函数吗?valueChangednull,whateverUi?从单击函数调用此函数时,我需要传递一个值,但我已使用var s=ui.editorInput[0]设置了目标输入;var tt=$s;以用户更改的实际值作为jquery属性的目标。您可以。您正在调用该方法,因此可以放置任何您想要的参数。您甚至可以在手动调用该方法时使其识别,如set{manual:true}在第二个参数中,然后执行如下检查if ui.manual。您将新值设置为0,因此只需传递{newValue:0}。我之前做过一个测试,我认为它会起作用。我还有其他封装的代码,因此需要进行一些调整。ThanksHi当我尝试将函数传递给value changed方法时,当我触发该函数时,event为null且ui未定义,例如,我有一个ValueChanged=functionevent,ui{var newvalue=ui.newvalue;newvalue未定义..我可以将ui传递给函数吗?valueChangednull,whateverUi?从单击函数调用此函数时,我需要传递一个值,但我已使用var s=ui.editorInput[0]设置了目标输入;var tt=$s;以用户更改的实际值作为jquery属性的目标。您可以。您正在调用该方法,因此可以放置任何您想要的参数。您甚至可以在手动调用该方法时使其识别,如set{manual:true}在第二个参数中,然后像这样执行检查if ui.manual。您正在将新值设置为0,所以只需传递{newValue:0}。我之前有一个测试,我认为它会工作。我还有其他封装的代码,因此需要进行一些调整。谢谢