简体   繁体   English

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

[英]How to select the first element of an object in javascript on IE8 without using []?

I'm fighting with IE8 and the flashcanvas.js plugin trying to capture a signature. 我正在与IE8和flashcanvas.js插件flashcanvas.js签名。

The demo works fine on IE8, but since I'm using a bunch of other plugins including requireJS, I'm running into some kind of problem on IE8. 演示在IE8上可以正常运行,但是由于我使用了很多其他插件,包括requireJS,所以我在IE8上遇到了某种问题。

I have nailed it down to this: 我已经将其固定为:

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]);
        }
    }
}

I don't understand why it's not working, but canvases[i] throws an [object HTMLUnknownElement] error. 我不明白为什么它不起作用,但是[object HTMLUnknownElement] canvases[i]抛出[object HTMLUnknownElement]错误。

Question : 问题
Any idea what might be the cause? 知道可能是什么原因吗? As a workaroud, how could I select the first element of my objectHTMLCollection without using [] and staying in Javascript! 作为一种工作方式,如何在不使用[]且不使用objectHTMLCollection情况下选择objectHTMLCollection的第一个元素!

I have also tried adding an id to the canvas element or select it by class (using Jquery). 我也尝试过将id添加到canvas元素或通过类选择它(使用Jquery)。 Same result, length=1 , select=forget it. 结果相同, length=1 ,选择=忘记。

Thanks for help! 感谢帮助!

EDIT : 编辑
I'm requesting plugins like this from my main app controller: 我正在从主应用程序控制器请求这样的插件:

$(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 });
            });
        };

This calls an app.js file, which defines all dependencies required and once everything has loaded, fire the plugin: 这将调用一个app.js文件,该文件定义了所需的所有依赖关系,一旦所有内容加载完毕,请触发插件:

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
            };  
        });

So, I'm wasting an http-request for flashcanvas.js when I don't really need it. 因此,当我不需要flashcanvas.js时,我在浪费它的HTTP请求。 But all files are loaded allright, I believe... 但是我相信所有文件都可以加载...

How are you adding the canvas element to the DOM? 您如何将canvas元素添加到DOM? Since IE8 doesn't support the canvas element, you need to create it dynamically and append it to the DOM, as shown in the FlashCanvas docs 由于IE8不支持canvas元素,因此您需要动态创建它并将其附加到DOM中,如FlashCanvas文档中所示

var canvas = document.createElement("canvas");
document.getElementById("target").appendChild(canvas);
if (typeof FlashCanvas != "undefined") {
    FlashCanvas.initElement(canvas);
}

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

You wrote : 你写了 :

var canvases = document.getElementsByTagName(CANVAS);

Are you sure CANVAS is a String ? 您确定CANVAS是字符串吗? Maybe you want to write 也许你想写

var canvases = document.getElementsByTagName("CANVAS");

Try to convert the collection to an array: 尝试将集合转换为数组:

var arr = Array.prototype.slice.call( canvases ); var arr = Array.prototype.slice.call(canvass);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM