onClick не работает в Internet Explorer, поиск обходного пути

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

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

Взгляните: видеогалерея Rough

Все работает нормально в Chrome и Firefox, но нажатие на миниатюры не работает в Internet Explorer. Я провел некоторое исследование, и кажется, что у onClick есть проблемы в IE, но ни одно из найденных мной решений не сработало.

В основном миниатюры видео находятся в таблице, и у каждой есть событие onClick:

<td id='videoBox1td' onClick=''>

Когда пользователь загружает/переключает страницы, jQuery() динамически редактирует атрибут onClick:

$('#videoBox' + i + 'td').attr({'onClick':'frames[\'videourl\', videoPlaylist);'});

Есть идеи? Заранее спасибо.


person dougmacklin    schedule 01.02.2012    source источник
comment
Ваш js в onClick кажется немного искаженным: frames[\'videourl\', videoPlaylist);   -  person Rick Kuipers    schedule 02.02.2012
comment
это js, который я должен использовать, чтобы заставить его играть в кадре. работает в chrome+ff, проблема с onClick не в этом.   -  person dougmacklin    schedule 02.02.2012


Ответы (1)


Как насчет этого?

    $('#videoBox' + i + 'td').bind("click", function () {
        ... do stuff here...
    }
person Bojin Li    schedule 01.02.2012
comment
Это почти работает, однако кажется, что ссылка на 6-е видео привязывается ко всем из них: ссылка. я повторяю правильно, поэтому я не могу понять, почему он перезаписывает другие видеобоксы :( - person dougmacklin; 02.02.2012
comment
У меня есть XML, из которого я вытаскиваю ссылку, например: var linkhtml=x[i].getElementsByTagName("linkhtml")[0].childNodes[0].nodeValue;. тогда там, где у вас есть «сделать что-то здесь», у меня есть: frames['nbaTeamArticlePlayer20091214141222'].playVideo(linkhtml, videoPlaylist20091214141222);, который правильно применяет ссылки. однако, как только я нажимаю на любой из эскизов, он вызывает то, что теперь равно переменной linkhtml, что является последним видео после итераций. - person dougmacklin; 02.02.2012
comment
Я предполагаю, что проблема в вашей функции щелчка. Вероятно, у вас есть переменная для ссылки, и вы меняете ее значение в своем цикле, ожидая, что оно сохранит это значение, когда обратный вызов действительно произойдет? Я почти уверен, что это не сработает. Переменная будет просто перезаписана, поэтому вы видите значение для последней итерации (мне кажется, 6-й?). Чтобы обойти эту проблему, вы можете использовать bind, чтобы переопределить значение ключевого слова this, и использовать this, чтобы каким-то образом ссылаться на ссылку, относящуюся к текущей итерации. - person Bojin Li; 02.02.2012
comment
$('#videoBox' + i + 'td').bind(click, function () {frames['nbaTeamArticlePlayer20091214141222'].playVideo(this, videoPlaylist20091214141222); }.bind(linkhtml)); - person Bojin Li; 02.02.2012
comment
я понимаю, что вы имеете в виду, и я понимаю, но я не уверен, как это исправить. put.bind(linkhtml) после закрывающей фигурной скобки, похоже, не работает (просто теперь не воспроизводится видео). я должен просто создать шесть разных переменных linkhtml? кажется странным, что это был бы лучший способ... спасибо за всю вашу помощь, кстати - person dougmacklin; 02.02.2012
comment
Что ж, если у вас всегда будет определенное количество ссылок, просто жестко запрограммируйте их. Если нет, попробуйте сначала сделать linkhtml объектом javascript, тогда я уверен, что он сработает, так как я пытался сделать что-то подобное ранее. Однако имейте в виду, что даже если это работает, жесткое кодирование все равно идеально, если вам это сойдет с рук, потому что Safari не понимает .bind для функций, поэтому этот код не будет работать в Safari. - person Bojin Li; 02.02.2012
comment
о, я не знал, что это не работает в сафари... мне нужно кросс-браузерное решение. слишком много ссылок на жесткий код. что, если вместо .bind() я использовал .mousedown()? - person dougmacklin; 02.02.2012
comment
$('#videoBox' + i + 'td').bind(click, function (){...stuff...} будет нормально работать в Safari, так как это метод jQuery. function (){...stuff. ..}.bind() не будет, так как это специфично для браузера. Эти привязки делают разные вещи, я думаю, вы их запутали. Во всяком случае, я на самом деле не знаю, как решить проблему с переменной ссылки, с которой вы столкнулись, не меняя того, что это ключевое слово означает. Но похоже, что это будет распространенная проблема, поэтому я думаю, вы можете найти ответ, погуглив еще немного. Извините. - person Bojin Li; 02.02.2012
comment
@DougieBear Эй, я нашел кросс-браузерный обходной путь для .bind для функций для определения пользовательского контекста. Вместо этого вы можете использовать juqery.proxy, чтобы вернуть новую функцию, которая имеет определенный вами контекст. stackoverflow.com/questions/6575518/jquery-ie-bind-this - person Bojin Li; 12.03.2012