Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Установление свойства value тегу input button (https://javascript.ru/forum/css-html-internet-explorer/28933-ustanovlenie-svojjstva-value-tegu-input-button.html)

Guliashik 07.06.2012 16:37

Установление свойства value тегу input button
 
(function()
{
    var temp=eval('tatarcha.alphabet.'+document.getElementById('combo_1').value);
    var buttons=[];
    buttons[0]=[];
    buttons[1]=[];
    for(var i=0;i<temp.length;i++)
    {
        buttons[0][i]=document.createElement('input');
        buttons[0][i].type= 'button';
        buttons[0][i].name= 'key_but_1';
        buttons[0][i].value= temp[i];
        buttons[0][i].style.visibility='hidden';
        if(i%10==0)
        {

            document.body.appendChild(document.createElement('br'));       
            
        }
        document.body.appendChild(buttons[0][i]);
        tatarcha.addEvent(buttons[0][i],'click',function(event){
            tatarcha.insertLetter(event);
        });
    }
    temp=eval('tatarcha.alphabet.'+document.getElementById('combo_2').value);
    for(i=0;i<temp.length;i++)
    {
        buttons[1][i]=document.createElement('input');
        buttons[1][i].type= 'button';
        buttons[1][i].name= 'key_but_2';
        buttons[1][i].value=temp[i];
        buttons[1][i].style.visibility='hidden';
        if(i%10==0)
        {
            document.body.appendChild(document.createElement('br'));       
        }
        document.body.appendChild(buttons[1][i]);
        tatarcha.addEvent(buttons[1][i],'click',function(event){
            tatarcha.insertLetter(event);
        });
    }
    tatarcha.alphabet.keyboard=buttons;
})();

Не работает только в IE. при этом остальные свойства (name, type) отлично выводятся в alert, а valye= undefined. В чём может быть проблема?

Deff 07.06.2012 16:50

Guliashik,
Да и еще - в скрытом visibility='hidden'; в ИЕ не меняет поле - скрывайте position:relative; z-index:-10;

Guliashik 07.06.2012 17:08

Цитата:

Сообщение от Deff (Сообщение 179827)
Guliashik,
Да и еще - в скрытом visibility='hidden'; в ИЕ не меняет поле - скрывайте position:relative; z-index:-10;

Странно, у меня скрывает.

Deff 07.06.2012 17:10

Guliashik,
Скрывать то скрывает, но поле в скрытом visibility='hidden'; или display:none; ИЕ не меняет

Guliashik 07.06.2012 17:14

window.alert(buttons[1][i].style.visibility); вывел hidden. Я скорее всего вас неверно понимаю. То есть проблема вся в visibility? Странно

Deff 07.06.2012 17:18

Guliashik,
Проблема в Ие - оно не позволяет полноценно работать скриптами с input - полями скрытыми атрибутами visibility: hidden или display:none

Guliashik 07.06.2012 17:26

Убрал всё что связано с visibility. К сожалению, не помогло. Да кстати, я делал alert (buttons.value) до установления visibilty=hidden. И всё равно было undefined, может проблема всё таки не в этом?

Deff 07.06.2012 17:33

Guliashik,
Может и помимо этого - изучаю код

Guliashik 07.06.2012 17:37

Пытался найти в гугле. Был похожий случай, но там была проблема вроде в области видимости переменной. Т. е. были две переменных с одинаковым именем, и одна другую перекрывала. Но вроде бы вышеприведённый код, не подходит под это описание.

Deff 07.06.2012 17:43

Guliashik,
А когда меняте скриптом value после вклейки на страницу - подобная ошибка есть ?

Guliashik 07.06.2012 17:49

Нет. Поменял value после добавления на форму, и значение поменялось. В чём была проблема, не подскажите? Надо было вешать на onload? Хотя я добавил этот скрипт намеренно в конец body.

Deff 07.06.2012 17:54

Guliashik,
Хм - я честно не пробовал после body, у мну всегда скрипты или в конце body, в футере, или в хиддере

Guliashik 07.06.2012 17:55

<script type="text/javascript" src="scripts/alphabet.js"></script>
            <script type="text/javascript">
                window.alert(tatarcha.alphabet.keyboard[0][0].value);
                tatarcha.alphabet.keyboard[0][0].value='а';
                window.alert(tatarcha.alphabet.keyboard[0][0].value);
            </script>
        </form>
    </body>

Вот так работает.

Deff 07.06.2012 18:02

Guliashik,
aa - кажется вспомнил - что при вставке в форму - ИЕ обнуляет инпуты,
(в форму скрипты не вставлял - генерил вместе с формой

Guliashik 07.06.2012 18:05

Цитата:

генерил вместе с формой
Это как?

Deff 07.06.2012 18:12

Guliashik,
А чем document.createElement('form'); отличается от
document.createElement('input'); ?

devote 07.06.2012 18:13

ИЕ не помню какой, не понимает свойства value у тега BUTTON и трактует его как innerHTML.

Guliashik 07.06.2012 18:17

Deff,
Один создаёт форму, другой инпут.
Перенёс все скрипты в head. Забил данную функцию на onload. Всё равно, как было undefined, так и есть.

Deff 07.06.2012 18:21

devote, Вродь там input ?

Deff 07.06.2012 18:22

Guliashik,
Ну вы же какой то танец с бубном освоили ? - проверьте кроссбраузерность

devote 07.06.2012 18:26

а может дело то не в input'ах, может дело в этом:
var temp=eval('tatarcha.alphabet.'+document.getElementById('combo_1').value);
или
var temp=eval('tatarcha.alphabet.'+document.getElementById('combo_2').value);
что это за данные, и откуда они берутся, и вы уверены что там все как надо?

Guliashik 07.06.2012 18:31

devote,
Да, там всё как надо. Происходит вызов массива.

Guliashik 07.06.2012 18:39

Приношу свои извинения. Проблема была именно в temp=eval...
Вывел его значение и оно равно undefined. Не додумался вывести его значение, из за того, что работает в других браузерах.
Большое спасибо за помощь!

Guliashik 07.06.2012 18:53

Опять соврал=) Проблема была не в eval. А в индексаторе temp[i]. Видать в IE это не проходит. Пришлось использовать charAt(i).


Часовой пояс GMT +3, время: 16:47.