小编unp*_*ito的帖子

仅包含数字和+符号的HTML输入

我正在尝试为仅接受数字和加号(+)的电话号码构建自定义文本输入; 所有其他角色需要丢弃并且不在场上显示.

我试图使用事件处理程序(onkeydown/onkeypress)并丢弃与其他键对应的输入.但是,我无法想出一种跨浏览器的方式来做到这一点.以下是我尝试过但不起作用的方法:

  • 使用onkeypress事件并查看event.key以确定按下了哪个键:在Chrome上不起作用(请参阅http://caniuse.com/keyboardevent-key).有没有跨浏览器的解决方法?

  • 使用onkeycode事件并查看event.keyCode:当我们需要按多个键来打印字符时不起作用(例如,英文键盘布局需要按Shift和=给+).此外,它允许显示!@#$%&*()等字符,因为按Shift和数字时会出现这些字符.(这是JavaScript代码中遵循的方法仅允许数字和加号,但它对我帮助不大;))

  • 使用HTML模式属性:这似乎并不能阻止人们写出他们想要的任何内容.

谢谢!

html javascript validation user-input

13
推荐指数
5
解决办法
1万
查看次数

根据用户区域设置过滤字符串列表

在使用AngularJS 1.6处理JavaScript项目时,我有一个我想要过滤的字符串列表.例如,假设我的列表包含árbol,cigüeña,nidotubo.

当用西班牙语过滤字符串时,如果我过滤了"u",我会期望出现cigüeñatubo,这对西班牙人来说是最自然的结果.然而,在德语中并非如此 - 你和ü是不同的字母,因此德国人不希望在名单上看到cigüeña.所以我正在寻找一种方法让我的列表过滤知道用户的语言环境.

我碰巧有一个包含许多变音符号的对象,这样:

diacritics["á"] = "a";
diacritics["ü"] = "u";
// and so on...
Run Code Online (Sandbox Code Playgroud)

这就是我的过滤代码:

function matches(word, search) {
    var cleanWord = removeDiacritics(word.toLowerCase());
    var cleanSearch = removeDiacritics(search.toLowerCase());
    return cleanWord.indexOf(cleanSearch) > -1;
}

function removeDiacritics(word) {
    function match(a) {
        return diacritics[a] || a;
    }
    return text.replace(/[^\u0000-\u007E]/g, match);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只删除了所有变音符号,所以我想让它知道用户的语言环境.因此,我将match()函数更改为:

function match(a) {
    if (diacritics[a] && a.localeCompare(diacritics[a] === 0) {
        return diacritics[a];
    }
    return a;
} …
Run Code Online (Sandbox Code Playgroud)

javascript internationalization angularjs

11
推荐指数
1
解决办法
785
查看次数

Phaser:如何在预加载后加载资产?

我想知道是否可以在Phaser的给定时间动态加载资源,而不是在预加载函数中加载所有内容.原因很简单:我有一个有三个不同级别的游戏,所有游戏都有不同的背景歌曲; 所以我宁愿只在启动时加载一首歌来减少加载时间.

现在,我的预加载功能如下所示:

preload: function()
{
    game.load.audio('pixel_world',
        ['assets/music/pixel_world_lo.ogg', 'assets/music/pixel_world_lo.mp3']);
    game.load.audio('second_source',
        ['assets/music/second_source_lo.ogg', 'assets/music/second_source_lo.mp3']);
    game.load.audio('reboot_complete',
        ['assets/music/reboot_complete_lo.ogg', 'assets/music/reboot_complete_lo.mp3']);
    game.load.image('pickup', 'assets/img/pickup.png');
}
Run Code Online (Sandbox Code Playgroud)

我尝试将game.load.audio()之一调用移动到create函数:

create: function()
{
    game.load.audio('pixel_world',
        ['assets/music/pixel_world_lo.ogg', 'assets/music/pixel_world_lo.mp3']);
    // good things follow...
}
Run Code Online (Sandbox Code Playgroud)

但是,以下调用失败:

this.cache.isSoundDecoded(level.song)
// Phaser.Cache.isSoundDecoded: Key "pixel_world" not found in Cache.

song = game.add.audio(level.song);
// Phaser.Cache.getSound: Key "pixel_world" not found in Cache.
Run Code Online (Sandbox Code Playgroud)

你知道如何让这个工作,或任何其他方式来确保在游戏启动时没有加载这三首歌曲?谢谢!

javascript phaser-framework

5
推荐指数
1
解决办法
2252
查看次数

IE和Edge上的drawImage上的IndexSizeError

我发现某个代码在Internet Explorer和Edge中失败了,但在Chrome和Firefox中似乎完美无缺:

var image = document.getElementById("myImage");
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.drawImage(image, 1, 0, 499, 278, 0, 0, 749, 417);
Run Code Online (Sandbox Code Playgroud)
img {
  width: 300px;
  height: 200px;
}
Run Code Online (Sandbox Code Playgroud)
<img id="myImage" src="https://image.ibb.co/bsANfm/emptyphoto.png" />

<canvas id="myCanvas" width="600" height="400"></canvas>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,CanvasRenderingContext2D.drawImage()调用在IE 11和Edge 40.15063.674.0中失败,我收到了IndexSizeError异常.根据MDN,如果画布或源矩形的大小为0,我应该只得到这个错误,这不是这里的情况.

任何人都可以了解我是否在这里做错了,或者是否有一些可用的解决方法?

html javascript canvas internet-explorer-11 microsoft-edge

4
推荐指数
1
解决办法
2922
查看次数

选择 QR 码的字符编码

我正在构建一个应用程序,它将能够生成包括任意文本数据的二维码。然而,这提出了一个挑战:我希望用户包含非 ASCII 字符,例如 \xc3\xa1 或 \xc3\xb6。

\n\n

根据我收集的信息,QR 码的默认值是 ISO-8859-1,但 UTF-8 似乎是一个常见的选择(并且接受更广泛的字符,例如阿拉伯语或希伯来语字符,这些字符不会见 ISO-8859-1)。

\n\n

然而,我链接的问题并没有回答对我来说至关重要的问题 - 我可以期望大多数现实世界的 QR 码阅读器(例如,智能手机或任何常用的 QR 阅读工具)能够可靠地读取带有 UTF 的 QR 码吗? 8编码?使用 ISO-8859-1 是否更安全?或者我应该假设在 QR 码中包含非 ASCII 字符会导致失败?

\n

qr-code utf-8 character-encoding

4
推荐指数
1
解决办法
1万
查看次数

Angular:子 ngTemplateOutlet 中的自定义 CSS

我试图找出如何设置要在 Angular 的 ngTemplateOutlet 中应用的自定义样式。我有两个组件,一个父组件和一个子组件,我将一个模板从父组件传递给子组件,然后使用 ngTemplateOutlet 打印该模板。我想要做的是使用父级和子级的样式呈现模板,而不仅仅是一种或另一种。

这是我的父组件的 HTML 的样子:

<child-component [template]="myTemplate">
  <ng-template #myTemplate>
    <p class="paragraph">Hello</p>
  </ng-template>
</child-component>
Run Code Online (Sandbox Code Playgroud)

CSS:

.paragraph { color: red; }
Run Code Online (Sandbox Code Playgroud)

还有孩子:

<ng-container *ngTemplateOutlet="myTemplate"></ng-container>
Run Code Online (Sandbox Code Playgroud)

CSS:

.paragraph { font-weight: bold; }
Run Code Online (Sandbox Code Playgroud)

我想要发生的是看到带有红色背景和粗体字母的“Hello”,但是 Angular 的 shadow DOM 封装迫使模板忽略孩子的样式。

我知道我可以通过删除 DOM 封装来解决这个问题,但这不是一个选项,因为我想避免将 CSS 类添加到全局命名空间。所以我想知道是否有一种方法可以在 Angular 中干净地实现期望效果。

css shadow-dom ng-template angular

4
推荐指数
1
解决办法
1372
查看次数