Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   плохо работает jQuery ui dialog нужен совет (https://javascript.ru/forum/jquery/22173-plokho-rabotaet-jquery-ui-dialog-nuzhen-sovet.html)

flytracer 09.10.2011 01:50

плохо работает jQuery ui dialog нужен совет
 
Написал такой код:
$(function() {
	   
       
       var index = "index.php?";
       var lin = $('#link_cu');
       	var log  = function(msg){
				console.log ? console.log(msg) : alert(msg);
			}
            
        $('#dialog').dialog({
					autoOpen: false,
                    
					buttons: {
						'Ok': function() { 
							$(this).dialog("destroy"); 
						}, 
						'Cancel': function() { 
							$(this).dialog('destroy'); 
						} 
					}
				});
            
	$('#link_cu').click(function(evtObj){
		
		evtObj.preventDefault();
		
		$.get(index+lin.attr('href'), {}, function(data){ 
		    $('#dialog').html(data).dialog('open');
            return false;
		},'html');
        
        
	});
 });

Окно вызывается, только для одного первого <a>, если закрываю то оно больше не открывается, и кнопки ок и cancel ничего не делают.
Что я не так сделал?

flytracer 09.10.2011 11:17

Спасибо теперь работает для всех ссылок, но окно все равно запускается только один раз

DjDiablo 09.10.2011 13:32

Блин. Сразу не заметил
Вы унечтожаете диалог полностью, а потом пытаетесь открыть унечтоженный диалог при помощи опен. Неудивительно что вы неможете открыть то что несуществует

вместо $('#dialog').dialog('destroy'); // код уничтожает диалог
используйте $('#dialog').dialog('close'); //код закрывает диалог

в отличии от унечтоженного, закрытый диалог можно открыть повторно

p.s.
Если-же вы всё таки хотите уничтожать диалог через destroy, то будьте любезны и создавать его перед открытием
т.е. каждый раз вместо open применять всю эту бодягу .dialog({ autoOpen: true,buttons: {бла бла} });

zebra 10.10.2011 13:51

Цитата:

Сообщение от nasqad
$(this).dialog("destroy");

=> $('#dialog').dialog('destroy');
по кнопкам, this будет ссылаться на саму кнопку а не диалог в вашем варианте

$(this) будет ссылка на #dialog

flytracer 10.10.2011 15:06

Вот я написал код для ссылки на чат, диалог работает хорошо
$('#chat').click(function(evtObj){
    
            evtObj.preventDefault();
    
          $('#chat_div').dialog({
		  			autoOpen: true,
                      
  				buttons: {
  						'Ok': function() { 
  							$(this).dialog('close'); 
  						}, 
  						'Cancel': function() { 
  							$(this).dialog('close');
  						} 
  					}
  				});
 
  		$.get($(this).attr('href'), {}, function(data){ 
  		    $('#chat_div').html(data).dialog('open');
 		},'html');
	});


и кнопки работают, и лишний раз не открывается.
Но вот второй код для ссылок из списка
$('.link_cu').click(function(evtObj){
    
            evtObj.preventDefault();
    
          $('#dialog_4').dialog({
		  			autoOpen: true,
                      
  				buttons: {
  						'Ok': function() { 
  							$(this).dialog('close'); 
  						}, 
  						'Cancel': function() { 
  							$(this).dialog('close');
  						} 
  					}
  				});
 
  		$.get($(this).attr('href'), {}, function(data){ 
  		    $('#dialog_4').html(data).dialog('open');
 		},'html');

	});


Вот в нем уже ссылки не работают, и если его не закрыть и нажать или еще раз на ту же ссылку или на какую другую из списка то он открывает еще один диалог а старый остается но уже пустым.

DjDiablo 10.10.2011 19:25

Твою девизию, я как будто предыдущий пост на китайком писал. Там же разжёвано всё, а ты опять на те же грабли.

Ты при каждом щелчке теперь создаёшь диалог понимаешь, СОЗДАЁШЬ а не открываешь. А при нажатии на кнопку ты его не унечтожаешь а только закрываешь, он неперестаёт существовать от того что ты его закрыл. При втором нажатии ты создашь ещё один диалог, не унечтожая старый. Ты плодищь диалоги как кроликов, причём содержимое диалога, кочует из одного диалога в другой.

Ты как бы создаёшь машину на заводе только для того чтобы завести поездить и заглушить, когда тебе снова нужна машина ты создаёшь ещё одну оставляя старую машину ржаветь во дворе.

Или пиши так.
В данном примере мы создаём машину чтобы попользоваться, а по окончанию использования взрываем её нафиг чтобы немешалась.

function createDialog(){
          $('#chat_div').dialog({
    			        autoOpen: true,                      
  				buttons: {
  						'Ok': function() { 
  							$(this).dialog('destroy'); 
  						}, 
  						'Cancel': function() { 
  							$(this).dialog('destroy');
  						} 
  					}
  				});
};
$('#chat').click(function(evtObj){
            createDialog();
            evtObj.preventDefault();
    
 
  		$.get($(this).attr('href'), {}, function(data){ 
  		     $('#chat_div').html(data);
                     createDialog();
 		},'html');
	});

Или так.

Тут мы создаём машину только однажды, когда надо заводим и едим, когда приехали глушим. И она стоит пока непонадобится. Как понадобится опять заводим и едим.

$('#chat_div').dialog({
			        autoOpen: false,                      
  				buttons: {
  						'Ok': function() { 
  							$(this).dialog('close'); 
  						}, 
  						'Cancel': function() { 
  							$(this).dialog('close');
  						} 
  					}
  				});

$('#chat').click(function(evtObj){
          $('#chat_div').dialog('open');
          evtObj.preventDefault();
               
  		$.get($(this).attr('href'), {}, function(data){ 
  		    $('#chat_div').html(data).dialog('open');
 		},'html');
	});


Часовой пояс GMT +3, время: 14:06.