2015-05-19 3 views
1

мне нужно, чтобы иметь возможность диалоговое окно для создания с приданием ID значение на лету затем выполнить .dialog('open'); и .dialog('close'); функции .. подробности о том, почему мне это нужно, у меня есть описание проблемы в another questionКак создать диалоговое окно на лету?

Моя мысль состоит в добавлении новый DIV до ICWSDialogs, затем используйте новый созданный div в качестве диалога.

<div id="ICWSDialogs"></div> 

и вот как я присоединяя DIV

$('#ICWSDialogs').append('<div class="ICWSinboundDialog" id="'+ prefix + interactionId +'" style="display: none;"></div>'); 

но мне кажется, что код не работает. Я получаю эту ошибку

Error: cannot call methods on dialog prior to initialization; attempted to call method 'isOpen' 

причиной этой ошибки является эта строка в моем коде ниже

if($(dialogID).dialog("isOpen") !== true){ 

Я считаю, что я инициализировать диалоговое окно перед созданием ДИВ ... Как я могу исправить это вопрос?

Вот весь мой код «это слишком много коды, но должно быть прямым

$(function(){ 

    //Server Side Message Polling 
    var evtSource = new EventSource("poll.php"); 

    evtSource.addEventListener("getMessagingQueue", function(e) { 

     var obj = JSON.parse(e.data); 
     processMessages(obj); 

    }, false); 

    //initialize the dialog box 
    $(".ICWSinboundDialog").dialog({ 
     resizable: true, 
     width: 400, 
     modal: false, 
     autoOpen: false, 
     stack: false, 
     buttons: { 
      "Answer": function(e) { 
       var id = $(this).data('id'); 
       var dialogID = $(this).data('dialogID') 
       handleInteraction('answer', id, dialogID); 

      }, 
      "Send to Voice Mail": function(e) { 
       var id = $(this).data('id'); 
       var dialogID = $(this).data('dialogID') 
       handleInteraction('sendToVoiceMail', id, dialogID); 
      }, 
      "Hold": function(e) { 
       var id = $(this).data('id'); 
       var dialogID = $(this).data('dialogID') 
       handleInteraction('hold', id, dialogID); 

      } 
     } 
    }); 

    //process the messages coming from the server 
    function processMessages(obj) { 
     var prefix = 'ICWS_'; 
     $.each(obj.calls, function(i, item){ 

      $.each(item, function(z, c){ 

       var interactionId = isset(c.interactionId, 0); 
       var Eic_CallDirection = isset(c.Eic_CallDirection, ''); 
       var Eic_State = isset(c.Eic_State, ''); 
       var mid = isset(c.mid, ''); 
       var account_id = isset(c.account_id, ''); 
       var Eic_RemoteAddress = isset(c.Eic_RemoteAddress, ''); 
       var dialogID = "#" + prefix + interactionId; 

       if(Eic_State == '' || Eic_CallDirection == '' || interactionId == 0){ 
        return; 
       } 

       //incoming call 
       if(Eic_CallDirection == 'I' && (Eic_State == 'A' || Eic_State == 'O' || Eic_State == 'M')){ 

        //create a dialog box if one does not already exists 
        if($(dialogID).length == 0) { 
         $('#ICWSDialogs').append('<div class="ICWSinboundDialog" id="'+ prefix + interactionId +'" style="display: none;"></div>'); 
        } 

        //Offering/Alerting calls 
        if(Eic_State == 'A' || Eic_State == 'O'){ 
         var msg = ''; 
         if(mid != ''){ 
          msg = '<br>MID: ' + mid; 
         } 

         if(account_id != ''){ 
          msg = '<br>Account ID: ' + account_id; 
         } 

         console.log('Incoming Call From ' + Eic_RemoteAddress + msg + ' ' + interactionId); 

         //display a dialog message 
         if($(dialogID).dialog("isOpen") !== true){ 

          $(dialogID).html('Incoming Call From ' + Eic_RemoteAddress + '<br>' + msg); 
          $(dialogID).data({'id': interactionId, 'dialogID': dialogID }).dialog('open').siblings('.ui-dialog-titlebar').remove(); 
         } 

         return; 
        } 

        //voice mail 
        if(Eic_State == 'M'){ 
         console.log('Phone number ' + Eic_RemoteAddress + ' is leaving a voice mail'); 

         //if the dialog box is open close it and remove it 
         if($(dialogID).dialog("isOpen") === true){ 
          $(dialogID).remove(); 
         } 

         return; 
        } 

       } 

       //outbound 
       elseif(Eic_CallDirection == 'O'){ 


        //Dialling call 
        if(Eic_State == 'O'){ 
         console.log('Dialling ' + Eic_RemoteAddress); 
         return; 
        } 

        //Dialling call 
        if(Eic_State == 'R'){ 
         console.log('Outbound call is ringing and waiting for answer '); 
         return; 
        } 

       } 

      }); 
     }); 
    } 

    //handle the Interaction request 
    function handleInteraction(method, id, dialogID){ 

      $.ajax({  
      type: 'GET', 
      url: 'interactions.php',   
      data: {'method': method, 'interactionId': id}, 
      dataType: 'json', 
      cache: false, 
      timeout: 5000, 
      success: function(data) {   
       $(dialogID).dialog('close'); 
      } 
     });   
    } 

    //sets/resets a variable  
    function isset(a, b){ 

     if(typeof a !== "undefined" && a){ 
      return a 
     } 

     return b; 
    } 


    //Handle interactions 
    $('.interaction').on('click', function(e){ 

     e.preventDefault(); 
     var id = $(this).attr('id'); 
     var list; 
     var phone = $('#phone').val(); 
     var run = true; 
     if(id == 'call'){ 
      if(phone.length < 10){ 
       run = false; 
       alert('Please enter a valid phone number to dial'); 
      } else { 
       list = {method: id, phone: $('#phone').val() } 
      } 
     } else { 
      list = {method: id}; 
     } 

     if(!run){ 
      return; 
     } 

     $.getJSON("interactions.php", list, function(data){ 
      //do stuff 
     }); 
    }); 


}); 
+0

1. Нам не нужен весь ваш скрипт. Только соответствующие биты будут делать. 2. 'append'ing element не вызовет' dialog', вам нужно повторно запустить его, когда вы его сделаете, или он просто будет там. –

ответ

0

сообщения об ошибке вы получили, кажется, довольно ясно. Вы должны инициализировать диалоговое окно ($(dialogID).dialog()) до вызова методов ($(dialogID).dialog("isOpen"))). Просто добавьте строку инициализации перед использованием диалога ...

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