小编Dre*_*ene的帖子

从模板创建Javascript对象

我想从模板创建一个javascript对象.问题是我不知道模板事先会是什么样子.举个简单的例子,如果我有模板功能

template = function (data) {
    return {
        title: data.title
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以跑去template({ title: "Steve" })取回物体

{ title: "Steve" }
Run Code Online (Sandbox Code Playgroud)

因为data.title直到我调用模板函数才进行评估.但是我正在构建一个基于用户输入的对象,其中字段名称事先是未知的,并且可以深深嵌套在对象中的任何位置.

如果我定义了事先返回的对象,那么data.title示例中的字段已经被评估,并且不会使用输入数据.例如,我希望能够像模板一样定义模板对象

obj = { title: this.title }
Run Code Online (Sandbox Code Playgroud)

然后将模板重新定义为

template = function () {
    return obj
}
Run Code Online (Sandbox Code Playgroud)

并打电话template.call({title:"Steve"}).但目前我回来了

{ title: undefined }
Run Code Online (Sandbox Code Playgroud)

因为this.title我定义时已经评估过了obj.也许我正在以错误的方式接近这个,因为我不断得出结论,我必须通过字符串化修改函数,修改字符串以包含未评估的代码this.title并从字符串创建新函数.但这似乎是一个非常可怕的想法.

遍历对象寻找要替换的特殊值似乎既昂贵又复杂.我也找了一些javascript对象模板库,但没有找到任何东西.

编辑:为了更清楚地表明输入数据和模板结构不一定匹配,我可能想要一个看起来像的模板

template = function (data) {
    return {
        name: "Alfred",
        stats: {
            age: 32,
            position: {
                level: 10,
                title: data.title
            } …
Run Code Online (Sandbox Code Playgroud)

javascript templates json function object

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

Safari 视频元素不会在 403 响应上触发错误事件

我正在尝试从 S3 加载一个视频,该视频当时可能正在转码,也可能没有转码。当它仍在处理时,我收到 403 响应。我测试的所有其他浏览器(Chrome/Firefox/IE)都会触发“错误”事件,这样我就可以向用户显示一条消息,如下所示:

var video = document.createElement('video');
video.onerror = function (e) {
// Show the user a message...
};
video.src = videoURL;
Run Code Online (Sandbox Code Playgroud)

但 Safari(在 OSX 上)只是记录到控制台而不触发事件。

无法加载资源:服务器响应状态为 403(禁止)

如果我将 video.src 设置为垃圾 URL,不会导致任何结果,但不会触发 403,它将触发。

是否有其他我可以监听的事件或其他方式来警告用户?我知道我可能可以对视频发出单独的 ajax 请求并检查响应,但我想避免开销。

javascript safari html5-video http-status-code-403 dom-events

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

单选按钮组在Chrome中具有价值,但在Firefox中没有

我有一个HTML表单

    <form name="radio-mc">
        <input type="radio" name="mc" id="radio-1" value="1"> First
        <input type="radio" name="mc" id="radio-2" value="2"> Second
        <input type="radio" name="mc" id="radio-3" value="3"> Third
    </form>
Run Code Online (Sandbox Code Playgroud)

我可以使用以下javascript通过表单/输入名称在Chrome中获取所选值

document.forms['radio-mc']['mc'].value
Run Code Online (Sandbox Code Playgroud)

但在Firefox中,价值未定义.

我通常认为这是Chrome的专长,但在Firefox检查器中,我可以看到父对象是一个[object NodeList]具有value属性的对象.它根本就没有任何东西......看似永远.

在这种情况下我不能使用jQuery.有没有办法在Firefox中的vanilla javascript中获取一个值(没有像我在Chrome中那样迭代单选按钮)?

html javascript forms firefox radio-button

3
推荐指数
1
解决办法
1591
查看次数