2010-04-26 2 views
0

Это я первый раз, когда я спрашиваю здесь. Извините, если ответ уже имеется.Динамическое изменение .click значение JQuery IE issue

У меня очень маленький сценарий jQuery, который может сжимать paramether для onclick attr на DIV.

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

В основном я устанавливаю 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> 

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

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

Thanx заранее. С наилучшими пожеланиями

Varois

ответ

1
$("#v_arrow_r").attr('onclick',''). 

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

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

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> 
+0

Удивительный ответный ответ. Огромное спасибо. Работает очень хорошо. – Varois

Смежные вопросы