Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2012, 18:45
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Вызов функции и jQuery
Всем привет!

При старте вызывается функция countTab(), которая динамически формирует строки HTML таблицы. Таблица формируется - все хорошо. Как только я вызываю эту же функцию по событию:
$( "#x-summ" ).keyup( function() {	
countTab(); 
} );
то происходит какая-то ошибка.
Функция продолжает нормально отрабатывать при каждом вызове, однако перестает работать подсветка строк:
$( "#x-table tr" ).hover(
				function()
				{
					$( this ).children( "td.bg-odd-simple" ).css( "backgroundColor", cS.c15 );
					$( this ).children( "td.bg-even-simple" ).css( "backgroundColor", cS.c19 );
< skip>
				},
				function()
				{
					$( this ).children( "td.bg-odd-simple" ).css( "backgroundColor", cS.c13 );
					$( this ).children( "td.bg-even-simple" ).css( "backgroundColor", cS.c14 );
< skip>
				});

и вызов плавающей таблицы по клику
$( "#x-table #td1" ).click(
				function( e )
				{
					var jpos = $( this ).offset();
					var jt_x = jpos.left + $( this ).outerWidth();
					var jt_y = jpos.top + $( this ).outerHeight();

					$( this ).css( 'borderColor', '#FF0000' );
					$( this ).css( 'border-width', '2px' );
					$.jtab( "<table border='0' cellpadding='0' cellspacing='0' id='m-table' " +
						         "width='" + (iS.i05 * .50).toFixed( 0 ) + "px' style='font-family: Arial; " +
						         "font-size: " + iS.i01 + "px;'>" +
						         "<tr>\n<th>" + ArLg[iS.i32][52] + "</th>\n" +
< skip>
						         "</table>",
					        0,
					        jt_x,
					        jt_y,
					        '#td1' );
				} );
которые до первого же вызова countTab() работают исправно. Причем, до вызова именно по событию, потому как countTab() отрабатвает первый раз при старте и не вызывает никаких конфликтов.
Консоль Firebug молчит как партизан

jQuery.noConflict не получается использовать, потому как стираются JS переменные, формируемые PHP (здесь этот код не показан)

Вот сокращенный JS-код:
$( document ).ready(
	 function()
	 {
     /*** start setup *********************************/
		 $( "#x-data" ).datepicker();
		 $( "#x-data" ).val( moment().format( "DD.MM.YYYY" ) );
		 $( "#x-summ" ).val( 1000 );

		 countTab();  
		 /*** end setup *********************************/
		
		 $( "#x-summ" ).keyup(   // <--------- вот этот вызов конфликтует
				function()
				{
					countTab();   
				} );
		 $( "#x-table tr" ).hover(  // <---------------- подсветка строк
				function()
				{
					$( this ).children( "td.bg-odd-simple" ).css( "backgroundColor", cS.c15 );
					$( this ).children( "td.bg-even-simple" ).css( "backgroundColor", cS.c19 );
< skip>
				},
				function()
				{
					$( this ).children( "td.bg-odd-simple" ).css( "backgroundColor", cS.c13 );
					$( this ).children( "td.bg-even-simple" ).css( "backgroundColor", cS.c14 );
< skip>
				});

		 $( "#x-table #td1" ).click(  // <---------------- плавающая таблица
				function( e )
				{
					var jpos = $( this ).offset();
					var jt_x = jpos.left + $( this ).outerWidth();
					var jt_y = jpos.top + $( this ).outerHeight();

					$( this ).css( 'borderColor', '#FF0000' );
					$( this ).css( 'border-width', '2px' );
					$.jtab( "<table border='0' cellpadding='0' cellspacing='0' id='m-table' " +
						         "width='" + (iS.i05 * .50).toFixed( 0 ) + "px' style='font-family: Arial; " +
						         "font-size: " + iS.i01 + "px;'>" +
						         "<tr>\n<th>" + ArLg[iS.i32][52] + "</th>\n" +
< skip>
						         "</table>",
					        0,
					        jt_x,
					        jt_y,
					        '#td1' );
				} );
		 /*** functions *********************************/
		 function countTab()  // <---------------- собственно функция
		 {
			 var tmpDat;
			 var tmp;
< skip>
			$( "#x-table>tbody" ).html( '' );

			 for( var i = 1; i < countM; i++ )
			 {
< skip>
			 tmp = "<tr>\n" +
			 "<td  id='td" + i + "' " + tdClassE + ">" + arTab[i].dat +
			 "</td>\n" +
< skip>
			 tmp += "</tr>\n";

		 	} // end For
		        $( "#x-table>tbody" ).append( tmp ); 

	          } // end countTab  
	 });

В чем может быть ошибка? Обнулял руками переменные перед выходом из функции countTab(); - тож не помагает.
Подскажите, плз, где собаки зарыты?
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2012, 19:01
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Ф-ция countTab() очищает все строки в таблицы (а вместе с ними и обработчики событий, уже зарегистрированных непосредственно на самих <TR>). Вам стоит переделать обработчик событий мыши на делегирующий вариант. То есть обработка события должна производиться не на самих <TR> (коль скоро они постоянно удаляются/добавляются), а на родительском элементе — к примеру, на <TABLE>.
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2012, 19:14
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Вот оно что! Спасибо. Только не совсем понял как сделать обработку на родительском элементе? Указывать всю иерархию, начиная с table?
$(table#x-table > tbody > td#td1). - так?
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2012, 19:19
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Да не. Что-то наподобие (не проверяю)
$("#x-table").on("mouseenter mouseleave", "tr", function (e) {
	if (e.type == "mouseenter") {
		$(this).css("background", "#0a0");
	} else {
		$(this).css("background", "");
	}
});


Почитайте про делегацию в jQuery API (.on(), .delegate()).
Ответить с цитированием
  #5 (permalink)  
Старый 28.11.2012, 19:21
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Огромное спасибо! Обязательно прочту!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции к элементу по клику (jquery) sogologo Общие вопросы Javascript 18 13.10.2012 19:14
Вызов ф-ции из (function($) {})(jQuery); - это возможно? JDev jQuery 7 29.05.2012 15:36
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
JQuery. Ajax. Глобальные функции Harvey jQuery 5 31.08.2011 16:54
непонятный вызов функции hedgi Общие вопросы Javascript 2 05.08.2010 11:55