JavaScript OnClick не работает на iOS

Я разработал код, который определяет, когда пользователь щелкает ячейку в таблице, а затем использует bgColor, установленный для этой ячейки.

Все отлично работает на настольном компьютере, но когда я пытаюсь использовать свой iPad, он ничего не делает. Я пытался использовать touchstart, но это не имело никакого значения.

Я попытался изменить это:-

 t[i].onclick = getVal;  

к этому:-

t[i].addEventListener('touchstart', function(){getVal});

Но это не сработало.... Мне также нужно будет поддерживать как настольные, так и сенсорные устройства... поэтому не уверен, как мне обеспечить поддержку обоих в этой ситуации.

Мой текущий код выглядит так:

<script type="text/javascript">

function getVal(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;

    var colorSelected = targ.attributes.bgcolor.value;
    alert(colorSelected);
}
onload = function() 
{
    var ids = ['colorchart1', 'colorchart2', 'colorchart3', 'colorchart4', 'colorchart5'];
    for(var j = 0; j < ids.length; j++) 
    {
        var t = document.getElementById(ids[j]).getElementsByTagName("td");
        for ( var i = 0; i < t.length; i++ )
            t[i].onclick = getVal; 
    }
}

</script>



<table id="colorchart1">
<tr>
<td bgColor="#F8E0E0"></td><td bgColor="#F8ECE0"></td><td bgColor="#F7F8E0"></td><td   bgColor="#ECF8E0"></td>
<td bgColor="#E0F8E0"></td><td bgColor="#E0F8EC"></td><td bgColor="#E0F8F7"></td><td bgColor="#E0ECF8"></td><td bgColor="#E0E0F8"></td>
</tr><tr>
<td bgColor="#F5A9A9"></td><td bgColor="#F5D0A9"></td><td bgColor="#F2F5A9"></td><td bgColor="#D0F5A9"></td>
<td bgColor="#A9F5A9"></td><td bgColor="#A9F5D0"></td><td bgColor="#A9F5F2"></td><td bgColor="#A9D0F5"></td><td bgColor="#A9A9F5"></td>
</tr>
<table>

1 ответ

Решение

Как насчет этой функции дескриптора?

function handler(e){
 e.target.nodeName!='TD'||alert(e.target.bgColor+' on '+
 e.target.parentNode.parentNode.parentNode.id);
}
window.addEventListener('click',handler,false);

or 

window.addEventListener('touchstart',handler,false);

демонстрация

http://jsfiddle.net/gfmbkmmn/

с несколькими столами

http://jsfiddle.net/gfmbkmmn/1/

вышеуказанная функция является альтернативным решением для обработки нескольких таблиц с помощью одного обработчика событий. чтобы найти ошибку, нужно больше информации:

примечание: в ios лучше что пишешь window.onloadи как насчет script теги в вашем "текущем коде", что делает функция getVal?

если у вас есть какие-либо вопросы по поводу кода, просто спросите

РЕДАКТИРОВАТЬ

function getVal(e){
 e=e||window.event;//not needed
 e.target=e.target||e.srcElement;//not needed
 if(e.target.nodeName=='TD'){// check if it's a td
  alert(e.target.bgColor);// why write  'targ.attributes.bgcolor.value' ?
 }
}

ошибка узла 7 лет назад "7 лет назад была изменена..." http://bugs.jquery.com/ticket/1148

js чувствителен к регистру: bgcolor != bgColor

http://jsfiddle.net/gfmbkmmn/2/ этот базовый пример позволяет вам создать быструю цветовую палитру.

Другие вопросы по тегам