Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   вопрос по ready (https://javascript.ru/forum/jquery/2456-vopros-po-ready.html)

PaCo 28.12.2008 19:15

вопрос по 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) что бы можно было ее вызывать на прямую? Буду очень признателен за любую помошь, заранее сенкс.

Octane 28.12.2008 20:19

Ну так вызывайте после того, как 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.