Динамическое изменение .click значение Jquery IE проблема - PullRequest
0 голосов
/ 26 апреля 2010

я впервые спрашиваю здесь. Извините, если ответ уже есть.

У меня есть очень маленький скрипт jQuery, который изменяет параметр onclick attr на DIV.

Это работает как стрелки вправо и влево для некоторого контента в середине.

В основном я устанавливаю onclick="foo(1)", затем при щелчке sld меняю значение от 1 до 2 и меняю каждый раз, когда нажимаю.

на jQuery functio Я использую:

$("#v_arrow_r").attr('onclick','').unbind().click(newclick_next);

это работает как брелок на FF и Chrome, но не работает на IE !!!! Argh ...

здесь код:

if (start == 24) {
 var a = 0;
 var b = 0;
} else {
 var a = start-6;
 var b = start+6;
}

next = "home_featured_videos(" + b + ");"; 
newclick_next = eval("(function(){"+next+"});");

prev = "home_featured_videos(" + a + ");";
newclick_prev = eval("(function(){"+prev+"});");

$('#video-module').css('background','');
$('#video-module').html(response);

$("#v_arrow_l").attr('onclick','').unbind().click(newclick_prev);
$("#v_arrow_r").attr('onclick','').unbind().click(newclick_next);

HTML:

<div id="videos-home">
  <div class="arrow-l" id="v_arrow_l" onclick="home_featured_videos(0);"></div>
  <div class="content" id="video-module">
   //CONTENT
  </div>
  <div class="arrow-r" id="v_arrow_r" onclick="home_featured_videos(6);"></div>
  <div class="clear_b"></div>
</div>

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

Если у кого-то есть идея, почему это происходит.

Спасибо заранее. С уважением

Varois

1 Ответ

1 голос
/ 26 апреля 2010
$("#v_arrow_r").attr('onclick','').

Не используйте attr для установки атрибутов обработчика событий. Это не работает в IE, и это уродливо и неэффективно везде. Если вы используете jQuery, используйте методы jQuery для привязки событий, такие как click().

Атрибуты встроенного обработчика событий - это взлом старой школы, которого вы все равно должны избегать.

next = "home_featured_videos(" + b + ");"; 
newclick_next = eval("(function(){"+next+"});");

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

<div id="videos-home">
    <div class="arrow-l" id="v_arrow_l""></div>
    <div class="content" id="video-module">
        //CONTENT
    </div>
    <div class="arrow-r" id="v_arrow_r"></div>
    <div class="clear_b"></div>
</div>
<script type="text/javascript">

    var pagei= 0; // initial page number
    var pagen= 4; // 4 pages (of 6 items each)

    $('#v_arrow_l').click(function() {
        turnpage(-1);
    });
    $('#v_arrow_r').click(function() {
        turnpage(1);
    });

    function turnpage(d) {
        pagei= (pagei+pagen+d)%pagen;
        $('#video-module').css('background','');
        $('#video-module').html('Page '+pagei); // or load() some AJAX or whatever
    }

</script>
...