- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 angular 4 中编写了一个指令,用于捕获 onFocus 和 onBlur。我可以看到我的指令在加载表单时被初始化,但是当我单击输入控件时没有看到 obBlur 或 Onfocus 触发。不知道出了什么问题。我在输入元素上设置了 ShortNumberFormatterDirective
指示
import { Directive, HostListener, ElementRef, OnInit } from "@angular/core";
//import { MyCurrencyPipe } from "./my-currency.pipe";
@Directive({ selector: "[shortNumberFormatter]" })
export class ShortNumberFormatterDirective implements OnInit {
private el: HTMLInputElement;
constructor(
private elementRef: ElementRef,
// private currencyPipe: MyCurrencyPipe
) {
this.el = this.elementRef.nativeElement;
}
ngOnInit() {
//this.el.value = this.currencyPipe.transform(this.el.value);
}
@HostListener("focus", ["$event.target.value"])
onFocus(value) {
//this.el.value = this.currencyPipe.parse(value); // opossite of transform
}
@HostListener("blur", ["$event.target.value"])
onBlur(value) {
//this.el.value = this.currencyPipe.transform(value);
}
}
<tr *ngFor="let item of domicileInfo.taxAssesment.items; let last = last; let item_IDX = index">
<td *ngIf="!last" >
<click-input [classNames]="{'has-warning': !isMinValid(item,item_IDX) }">
<!-- <input [(ngModel)]="item.minSize" (ngModelChange)="modelChanged(item,item_IDX)" required min="0" max="999999999999999" numberFormat="shortNumberFormat:.0"> -->
<input [(ngModel)]="item.minSize" shortNumberFormatter required min="0" max="999999999999999" numberFormat="shortNumberFormat:.0">
</click-input>
</td>
<td *ngIf="!last">
<click-input [classNames]="{'has-warning': !isMaxValid(item,item_IDX) }">
<!-- <input [(ngModel)]="item.maxSize" (ngModelChange)="modelChanged(item,item_IDX)" required min="0" max="999999999999999" numberFormat="shortNumberFormat:.0"> -->
<input [(ngModel)]="item.maxSize" required min="0" max="999999999999999" numberFormat="shortNumberFormat:.0">
</click-input>
</td>
</tr>
import { Directive, HostListener } from "@angular/core";
import { NgControl } from '@angular/forms';
import { ShortNumberFormatPipe } from '../pipes/shortNumberFormat/shortNumberFormat.pipe';
@Directive({ selector: "[shortNumberFormatter]" })
export class ShortNumberFormatterDirective {
_shortNumberPipe = new ShortNumberFormatPipe();
get ctrl() {
return this.ngControl.control;
}
constructor(
private ngControl: NgControl
) { }
ngOnInit() {
if (this.ctrl != null && this.ctrl.value !=null) {
const x = this._shortNumberPipe.transform(this.ctrl.value);
console.log(x);
this.ctrl.setValue(x);
}
}
@HostListener("focus")
onFocus() {
const x = this._shortNumberPipe.parse(this.ctrl.value);
console.log(x);
this.ctrl.setValue(x);
}
@HostListener("blur")
onBlur() {
const x = this._shortNumberPipe.transform(this.ctrl.value);
console.log(x);
this.ctrl.setValue(x);
}
}
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'shortNumberFormat'
})
export class ShortNumberFormatPipe implements PipeTransform {
transform(number: any, decimals = 0) {
if (number === null) {
return;
}
number = parseFloat(number);
if (isNaN(number)) {
return;
}
if (isNaN(decimals)) {
return;
}
const signPrefix = number < 0 ? '-' : '';
number = Math.abs(number);
if (number <= 999) { // hundreds
number = number.toFixed(decimals);
} else if (number >= 1000 && number <= 999999) { // thousands
number = (number / 1000).toFixed(decimals) + 'K';
} else if (number >= 1000000 && number <= 999999999) { // millions
number = (number / 1000000).toFixed(decimals) + 'M';
} else { // billions
number = (number / 1000000000).toFixed(decimals) + 'B';
}
return signPrefix + number;
}
parse(inputField: string)
{
let parsedNumber: any;
if(inputField === '')
return;
let shortFormatCharector = inputField.substr(inputField.length - 1);
switch(shortFormatCharector)
{
case'k':
parsedNumber = parsedNumber * 1000;
break;
case'M':
parsedNumber = parsedNumber * 1000000;
break;
case'B':
parsedNumber = parsedNumber * 1000000000;
break;
}
return parsedNumber;
}
}
最佳答案
虽然有 (blur)
Angular 组件中的输出事件,AFAIK 主机监听的对应事件不是 blur
但是 focusout
.所以你应该使用:
@HostListener("focusout", ["$event.target.value"])
onBlur(value) {
// ...
}
关于angular - HostListener onBlur 和 onFocus 没有在 angular4 中被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49874669/
$('#lPass').focus(function() { if (this.value == this.defaultValue) this.value = '';
我有一个容器 div,里面包含许多输入和复选框,我想仅在容器 div 失去焦点时触发 onBlur 事件,而不是每次其中的任何元素失去焦点时触发 onBlur 事件 最佳答案 react docume
我的表单检查不起作用。如果我将别名字段留空,它将返回已填充的名称字段。 var alias = document.getElementById("alias"); var name = documen
我有一个包含 5 个字段和一个提交按钮的表单。在其中一个字段上,我有一个 onblur 事件,但如果用户更改该文本框中的值并直接单击提交按钮,那么在这种情况下 onblur 不会被触发或不起作用。在这
我正在尝试创建一个函数,允许编辑 div,并且当不再聚焦时(例如单击元素外部),它应该执行一个函数。 当用 fiddle 测试这个时,预期的响应不会发生。相反,当单击该元素时,它既使内容可编辑,又同时
我有一个带有 React-InstantSearch: 的导航栏为我提供了自动完成功能,有一个 onChange触发显示建议框的事件。还有一个onBlur当您离开搜索框并隐藏该框时触发的事件。这个o
我有两个输入,它们是 的一部分。我试图在其中之一发生更改(dpFin)后获取输入的值。问题是,当我使用 var endDt = document.getElementById("dpFin").va
我有一个默认情况下禁用的文本框... onclick 可以工作并使其能够输入,但是当我单击单选按钮时...它不会再次禁用该文本框 有什么线索吗? 提前致谢 李 最佳答案 没有“启用”属性。您必须将
我正在使用 JavaScript 对 HTML 表单进行验证。为什么刷新页面时Validator.validateInput会执行? 我希望它在模糊元素“first”时执行。 var Validato
当使用 jQuery 将文本输入到文本框时,我尝试编辑选择输入的内容。这是我的文本框 这是我的多重选择框 Yazılımevi 这是我的 javascript 函数(我知道这很简单) func
我有一个使用 jquery form validator 的表单:我的问题是如何让验证不仅在提交时触发,而且在模糊时触发?我希望它验证模糊时的每个单独字段(而不是模糊时的整个表单,因为我不希望为尚未向
我有以下代码,也称为内联代码,如下所示。问题是警报永远不会触发。在 Firebug 中,我可以看到数据充满了我的对象,但仍然没有触发警报。有什么想法吗? function update(s_arriv
如何在 javascript onblur 中为文本框中输入的所有值添加前缀 - 符号 最佳答案 首先,您需要添加事件处理程序。一旦你这样做了,这就是你的功能: function textBoxBlu
我正在使用 onblur 事件来获取日期选择器中的日期值。这是我的控件: 这是我的功能: function UpdatePrice(_this) { console.log(_this.va
我有一个表格,其中包含许多用户可以为其赋值的文本输入字段。我的目标是,如果用户“onBlur”的any 字段,则将激活一个功能。我可以通过单独标记每个单元格来解决这个问题,但它会非常重复,我相信有更有
我正在使用 onblur 进行文本框数据检查。 OnBlur 工作正常,直到或除非我们不按 ALT + TAB 或 Windows 按钮。 如果我按下 ALT + TAB 然后模糊函数执行多次.. 例
HTML It is a div which has a dark future Not Remove 和脚本 $(function(){ $("input").blur(function(
我在 jquery 的 blur 和 onblur 事件上遇到了陌生人问题。当您对输入进行模糊处理时,首先执行 onblur 事件和 .blur 方法。但是,当您通过点击 anchor 标记来调用触发
我正在使用 jQuery 将一个输入字段的值复制到另一个模糊的输入字段。这是我的代码: $( "input[id$=token-input-search_field]" ).blur( functio
我有一个应用程序,我需要更新数字,为此,我计划如下,当我单击数字容器时,我将其转换为 jquery 的输入字段,然后在模糊时我想将其关闭为容器div内的纯文本,然后触发ajax在数据库中更新它,但第一
我是一名优秀的程序员,十分优秀!