вопрос по ready
Доброшо всем времени суток, вобшем у меня маленький вопрос по jQyery, вернее по ready, есть вот такой код
var soundEnable = 1; var $j = jQuery.noConflict(); $j(document).ready(function() { $j(document.body).append('<div id="soundContainer"></div>'); $j(document.body).append('<div id="soundOn"></div>'); $j('#soundOn').css('display', 'none'); $j('#soundOn').css('width', '128px'); $j('#soundOn').css('height', '128px'); $j('#soundOn').css('left', '50%'); $j('#soundOn').css('top', '50%'); $j('#soundOn').css('margin-left', '-64px'); $j('#soundOn').css('margin-top', '-64px'); $j('#soundOn').css('z-index', '999999'); $j('#soundOn').css('background', 'url(in.gif) no-repeat'); if (!$j.browser.msie) { $j('#soundOn').css('position', 'fixed'); } else{ $j('#soundOn').css('position', 'absolute'); } }); function playSound(path) { var sound = path+'.swf'; if (soundEnable) { if ($j.browser.msie) { document.getElementById('soundContainer').innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"><param name="movie" value="'+sound+'"><param name="quality" value="high"></object>'; } else { $j('#soundContainer').html('<embed src="'+sound+'" width="1" height="1" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash"></embed>'); } $j('#soundOn').stop().css('opacity', 1).fadeIn(250).fadeOut(1500); soundEnable = 0; timeout = setTimeout("soundEnable = 1",2000); } } и он работает если функция playSound(path) вызываеться например при onclick="playSound('onLine') событии, но когда я напрямую js файле пытаюсь пытаюсь вызвать playSound('onLine') - то происходит ошибка, т.к. div создаваемые jQyery еше не созданы, как можно видоизменит фунуцию playSound(path) что бы можно было ее вызывать на прямую? Буду очень признателен за любую помошь, заранее сенкс. |
Ну так вызывайте после того, как DIV'ы будут созданы, в чем проблема так сделать?
И почитайте документацию по jQuery, вы плохо пользуетесь возможностями, которые он предоставляет, ваш код можно переписать примерно следующим образом: // Вызов noConflict() должен быть сразу же после jQuery jQuery.noConflict(); var soundEnable = 1; (function($) { $(function() { // $(document).ready(…) писать не обязательно $(document.body).append('<div id="soundContainer"></div>'); $('<div>').attr('id', 'soundOn').css({display: 'none', width: '128px', height: '128px', left: '50%', top: '50%', marginLeft: '-64px', marginTop: '-64px', zIndex: '999999', background: 'url(in.gif) no-repeat', position: $.browser.msie ? 'absolute' : 'fixed'}).appendTo(document.body); }); function playSound(path) { var sound = path+'.swf'; if(soundEnable) { $('#soundContainer').html($.browser.msie ? '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"><param name="movie" value="'+sound+'"><param name="quality" value="high"></object>' : '<embed src="'+sound+'" width="1" height="1" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash"></embed>'); $('#soundOn').stop().css('opacity', 1).fadeIn(250).fadeOut(1500); soundEnable = 0; timeout = setTimeout(function() { soundEnable = 1; }, 2000); } } })(jQuery); |
Часовой пояс GMT +3, время: 08:40. |