IE выдал ошибку недопустимого аргумента, firefox не

#javascript #internet-explorer

#javascript #internet-explorer

Вопрос:

Я помогал другу изучать HTML, CSS и т.д., Когда хотел продемонстрировать возможности JavaScript. Мы создали несколько разделов, которые содержат изображение облака, и мы перемещаем их по экрану (справа налево, затем, когда он стекает со страницы, он возвращается к начальной точке внутренней ширины окна), так что это похоже на небо — довольно простой сценарий. Теперь в Firefox все было в порядке, но при просмотре этого позже в IE я заметил ошибку. На самом деле это не проблема, поскольку скрипт работает, но я хотел бы знать, почему это происходит и как это остановить!

Вот скрипт, который я вызываю, используя ненавязчивый загрузчик в событии window.onload

     function moveCloud(cloudID, TimeOut, CloudWidth, thisLeft){

    var elem = document.getElementById(cloudID);
    var xpos = parseInt(elem.style.left);

    if(xpos > -CloudWidth){
        xpos--; 
      }else{
        xpos = window.innerWidth;
       }

    elem.style.left = xpos   "px";
    movement = setTimeout("moveCloud('"   cloudID   "',"   TimeOut   ","   CloudWidth   ","   thisLeft  ")",TimeOut);
}
  

Я думал, что это может быть связано с объединением целого числа в sting, но я думал, что JavaScript обработал это приведение? Есть идеи?

Это ошибка

Строка: 38 Ошибка: недопустимый аргумент.

* ОБНОВИТЬ ***

вот как я вызываю функцию, сначала это

 function StartCloud(cloudID, TimeOut, CloudWidth, thisLeft, thisTop){


    var elem = document.getElementById(cloudID); 
    if(elem){ // make sure item exists then position it via the JavaScript not the CSS
        elem.style.position = "absolute"; 
        elem.style.left = parseInt(thisLeft)   "px";
        elem.style.top = parseInt(thisTop)    "px";
        movement = setTimeout("moveCloud('"   cloudID   "',"   TimeOut   ","   CloudWidth   ","   thisLeft  ")",TimeOut); // start the animation function
    }
}
  

и это мой вызов — есть 4 облачных подразделения

 window.onload = function (){
    //unobtrussive event handler
    StartCloud('cloud1', 60, 717, 450, 30);
    StartCloud('cloud2', 35, 349, 950, 230);
    StartCloud('cloud3', 30, 335, 300, 260);
    StartCloud('cloud4', 15, 290, 600, 450);
}
  

Комментарии:

1. elem.style. left = xpos «px»; находится в строке 38, глупый я, забыл этот бит!

2. Я собираюсь сказать, что вы ошибаетесь, и это не та строка. Invalid argument подразумевает некоторую форму вызова функции.

3. у вас также отсутствует основание в parseInt parseInt(elem.style.left, 10)

4. Вы используете setTimeout для повторного выполнения чего-либо?

5. Дух! Window.innerWidth не поддерживается IE, поэтому мне пришлось написать условие, используя document.documentElement.clientWidth

Ответ №1:

Дух! Window.innerWidth не поддерживается IE, поэтому мне пришлось написать условие, используя document.documentElement.clientWidth