我想在输入改变时调用该函数。
我在home.html文件中创建了以下内容
<ion-input type="text" class="scoreboardus" [(ngModel)]='text'
(input)='onInputTime($event.target.value)' (change)='onChangeTime($event.target.value)'>
</ion-input>
并在home.ts文件中
onChangeTime() {
alert('onChangeTime called');
}
onInputTime() {
alert('onInputTime called');
}
如果在输入字段中手动给出值,则上述代码可以正常工作。
我的问题:
我正在更改外部javascript文件之一的输入值。
$('.scoreboardus input').val(200).trigger('onchange');
上面的代码改变了输入字段值......但是没有调用函数
创建应用后,结果代码应该有效。
答案 0 :(得分:12)
您必须使用(ionChange)而不是(更改)。
<ion-input type="text" class="scoreboardus" [(ngModel)]='text' (input)='onInputTime($event.target.value)' (ionChange)='onChangeTime($event.target.value)'>
答案 1 :(得分:4)
您是否在ionic-2
中安装了Jquery,如下所示
安装Jquery
npm install jquery --save
之后,将JQuery global derectory安装到typings(您可以导入它):
typings install dt~jquery --global --save
然后,您可以在&#34; home.ts&#34;
中导入JQuery
import * as $ from 'jquery'
现在尝试Jquery
功能,如下所示:
$('.scoreboardus input').val(200).trigger('change');
<强>更新强> 您可以将模板引用变量分配给#ionInput1,在组件类中保留其原生元素(通过@ViewChild),然后使用jQuery本身来监听更改事件。
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h1>Firing Jquery</h1>
<hr>
<ion-input type="text" class="scoreboardus" [(ngModel)]='text'
(input)='onInputTime($event.target.value)' (change)='onChangeTime($event.target.value)' #ionInput1>
</ion-input>
})
export class AppComponent implements AfterViewInit {
@ViewChild('ionInput1') ionInput1:ElementRef;
ngAfterViewInit() {
$(this.ionInput1.nativeElement).on('change', (e) => {
console.log('Change made -- ngAfterViewInit');
this.onChangeTime(e);
});
}
onChangeTime(): void{
console.log('Change made -- onChangeTime');
}
}
更多信息请参阅此SO SOlution
答案 2 :(得分:3)
你的方式有两个黑点,我们无法控制。它们是:
1. (change)='onChangeTime($event.target.value)'
。我不确定Ionic如何绑定change
函数。也许与change
的{{1}}函数不一样。所以我们无法控制它
2. input
我们无法控制Jquery如何触发它。
所以,只要采用我们知道并且我们可以控制的方式。它是纯粹的javascript。
$(...).trigger('onchange')
您应该通过javascript添加<ion-input type="text" class="scoreboardus" [(ngModel)]='text'> </ion-input>
侦听器:
onChange
答案 3 :(得分:2)
你非常接近你正在寻找的东西。
您的代码有一个小问题
$('.scoreboardus input').val(200).trigger('onchange');
^^^^^^^^^
而不是onchange
,您应该使用change
来触发操作。不应将on
添加为前缀。事件名称应该与我们在jQuery中的on()
函数或JavaScript中的addEventListener
中使用的名称相同。
$('.scoreboardus input').val(200).trigger('change');
onchange
无效
$(document).ready(function(){
$('#ip').on('change',function(){
alert(this.value);
});
$('#btn').click(function(){
$('#ip').val('test').trigger('onchange');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ip" />
<button id="btn">Change</button>
您必须使用change
代替
$(document).ready(function(){
$('#ip').on('change',function(){
alert(this.value);
});
$('#btn').click(function(){
$('#ip').val('test').trigger('change');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ip" />
<button id="btn">Change</button>
您的代码仅在手动编辑时才起作用,因为脚本所做的更改不会触发事件侦听器。你必须手动触发它。
另请注意,您必须在Angular中使用箭头函数()=>{}
并在ngAfterViewInit
中添加jQuery代码,然后只有角度支持动态元素
答案 4 :(得分:0)
试试这个:
<ion-item>
<ion-input [(ngModel)]="nickname" (keypress)="onChange($event)" ></ion-input>
</ion-item>
答案 5 :(得分:0)
使用keyup事件会自动触发事件处理程序并为我工作