首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用[]的情况下在IE8上选择javascript中对象的第一个元素?

如何在不使用[]的情况下在IE8上选择javascript中对象的第一个元素?
EN

Stack Overflow用户
提问于 2012-10-26 12:10:58
回答 3查看 268关注 0票数 0

我正在与IE8和flashcanvas.js插件进行斗争,试图捕捉一个签名。

演示在IE8上运行得很好,但是由于我使用了许多其他插件,包括requireJS,所以在IE8上遇到了一些问题。

我已经确定了这一点:

代码语言:javascript
复制
function onReadyStateChange() {
if (document.readyState === "complete") {
    document.detachEvent(ON_READY_STATE_CHANGE, onReadyStateChange);

    var canvases = document.getElementsByTagName(CANVAS);

    // => returns 1 in IE8 debugger
    console.log( canvases.length )
    // => returns objectHTMLCollection
    console.log( canvases )

    for (var i = 0, n = canvases.length; i < n; ++i) {
        console.log(" run "+i)

        // => this produces an error...
        console.log( canvases[i])

        // trigger
        FlashCanvas.initElement(canvases[i]);
        }
    }
}

我不明白为什么它不能工作,但是canvases[i]抛出了一个[object HTMLUnknownElement]错误。

问题

知道原因是什么吗?作为一个工作狂,我如何选择我的objectHTMLCollection的第一个元素,而不用使用[]和停留在Javascript!

我还尝试向画布元素添加一个id,或者按类选择它(使用Jquery)。同样的结果,length=1,select=forget it。

谢谢你帮忙!

编辑

我要求我的主应用程序控制器提供这样的插件:

代码语言:javascript
复制
$(document).on('pagebeforeshow', '#basket', function(e, data){  

    // signaturePad
    var signIt = $('.signatureWrapper');
    if ( signIt.length > 0 && signIt.jqmData('bound') != true ) {
        signIt.jqmData('bound', true);

        require(['services/signature/app'], function (App) {
        App.render({target: signIt, drawOnly: true });
            });
        };

这将调用一个app.js文件,该文件定义了所需的所有依赖项,一旦加载了所有依赖项,就启动插件:

代码语言:javascript
复制
define([  'services/signature/app'
        , 'services/signature/jquery.signaturepad.min'
        , 'services/signature/json2.min'
        , 'services/signature/flashcanvas'
        ], function( app, signature, json2, flashcanvas ) {

    function render(parameters) {
        parameters.target.signaturePad({ drawOnly:parameters.drawOnly });
        };
        return {
            render:render
            };  
        });

所以,当我真的不需要的时候,我在浪费flashcanvas.js的http请求。但所有的文件都装好了,我相信.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 12:42:42

如何将画布元素添加到DOM中?由于IE8不支持画布元素,所以需要动态创建它并将其附加到DOM中,如FlashCanvas文档所示

代码语言:javascript
复制
var canvas = document.createElement("canvas");
document.getElementById("target").appendChild(canvas);
if (typeof FlashCanvas != "undefined") {
    FlashCanvas.initElement(canvas);
}
票数 3
EN

Stack Overflow用户

发布于 2012-10-26 12:46:31

数组document.getElementsByName(String balise) http://www.toutjavascript.com/reference/reference.php?iref=156

你写道:

代码语言:javascript
复制
var canvases = document.getElementsByTagName(CANVAS);

你确定画布是一根绳子吗?也许你想写

代码语言:javascript
复制
var canvases = document.getElementsByTagName("CANVAS");
票数 1
EN

Stack Overflow用户

发布于 2012-10-26 12:23:04

尝试将集合转换为数组:

Array.prototype.slice.call(画布);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13086687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档