2013-11-26 4 views
-3

Я написал функцию Javascript, которая использует JQuery-ui. Я могу закрыть всплывающее окно с JQueryЗакрытие JQuery UI popup

$(this).dialog("close") 

Но если включить его в состоянии, если, как это в коде здесь, он просто не работает. Я что-то не понимаю о том, как это ключевое слово работает в JS?

Marco

if (vars["server_url"] !== undefined) 
     var serverUrl = vars["server_url"]; 
     var ODATA_ENDPOINT = "XRMServices/2011/OrganizationData.svc"; 
     var CRMObject = new Object(); 
     ///////////////////////////////////////////////////////////// 
     // Specify the ODATA entity collection 
     var ODATA_EntityCollection = "/custom_serviceobjectSet"; 



     var alreadyExisting = new Object; 
     alreadyExisting.value = ""; 
     retrieveExistingPlacement(serverUrl, custom_name, placering.val(), alreadyExisting); 
     setTimeout(function() { 
      alert(alreadyExisting.value); 
      if (alreadyExisting.value === true) { 

       placering.addClass("ui-state-error"); 
       updateTips("Ett ServiceObject med sån placeringen redan finns."); 
      } 
      else if (alreadyExisting.value === false) 
      { 
      //alert(ordning.val()); 
      $("#users tbody").append("<tr>" + 
       "<td>" + CRMObject.custom_order + "</td>" + 
       "<td>" + CRMObject.custom_Placement + "</td>" + 
       "<td>" + CRMObject.custom_Quantity + "</td>" + 
       "</tr>"); 
      var jsonEntity = window.JSON.stringify(CRMObject); 
      //Asynchronous AJAX function to Create a CRM record using OData 
      $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       datatype: "json", 
       url: serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection, 
       data: jsonEntity, 
       beforeSend: function(XMLHttpRequest) { 
        //Specifying this header ensures that the results will be returned as JSON. 
        XMLHttpRequest.setRequestHeader("Accept", "application/json"); 
       }, 
       success: function(data, textStatus, XmlHttpRequest) { 

        var NewCRMRecordCreated = data["d"]; 
       }, 
       error: function(XMLHttpRequest, textStatus, errorThrown) { 
        alert(serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection); 
        alert(errorThrown); 
        alert(XMLHttpRequest.responseText); 
       } 
      }); 
       alert("OUT"); 

      } 
     }, 1000); 
     if (alreadyExisting.value === false) 
      $("#dialog-form").dialog("close"); 
}     
+1

Большая часть этого кода не имеет никакого отношения к вашему вопросу. Выберите диалог 'id', так как' this', вероятно, не относится к нему в этом случае. – Mathletics

+0

Я предлагаю пройти через код с помощью отладчика. –

+1

OFFTOP: большая часть вашей логики входит внутрь 'if (bValid) {...}'. почему бы не вернуться из функции, если 'bValid' является ложным и сохранить некоторые отступы? – twil

ответ

1

Ваша проблема не здесь:

if (alreadyExisting.value === false) 
     $(this).dialog("close"); 
    } 

это больше не относится диалог. Доступ через ид диалогового окна вместо это

if (alreadyExisting.value === false) 
     $("#dialogId").dialog("close"); 
    } 
+0

Выполнение этого действия и изменение типа XmlHttpRequest, который проверяет, была ли запись уже существующей для синхронизации, заставила ее работать. Оказалось, что, несмотря на установку тайм-аута, значение не было обновлено вовремя для checl – MaPi

1

Я предполагаю, что вы спрашиваете об этом:

if (alreadyExisting.value === false) 
    $(this).dialog("close"); 
} 

Если это так, то эта условная не может не выполнится. Это происходит потому, что несколько строк раньше вы сделаете это:

alreadyExisting.value = ""; 

Конечно же, вы назвать это:

retrieveExistingPlacement(serverUrl, custom_name, placering.val(), alreadyExisting); 

Что, если он не установлен alreadyExisting.value в false будет означать диалог закрывался логика никогда не будет запускаться. Что бы ни случилось в функции setTimeout(), происходит асинхронно, поэтому это не повлияет на значение, оцениваемое для alreadyExisting.value

+0

retrieveExistingPlacement обновлял значение, поэтому я использую Object вместо переменной. – MaPi

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