2013-12-06 3 views
0
function hideClose(){ 

     var unreplied_hide_close_btn = jQuery('.commentbox-gray:not(.private-note)').length; 

     var close_button = jQuery("a[data-status-name='Closed'][data-cnt-id='cnt-note']"); 

     if(unreplied_hide_close_btn > 0) 
     { 
      jQuery('#close_ticket_btn').show(); 

      close_button.show(); 

      if(jQuery("#helpdesk_ticket_status > option[value='5']").length <= 0) 
      { 
       jQuery("#helpdesk_ticket_status").append('<option value="5">Closed</option>'); 
      } 

     } 

     else 
     { 

      jQuery("#helpdesk_ticket_status > option[value='5']").remove().end(); 

      jQuery('#close_ticket_btn').hide(); 

       var button_text = jQuery("[data-public-text='Add Public Note'] span").text(); 

      if((button_text == "Add Private Note")) 
      { 
       close_button.hide(); 
      } 

      else 
      { 
       close_button.show(); 
      } 


     } 
    } 

Вот функция, которая переключает кнопку закрытия, если есть элемент с классом «Комментарий ящика», который не является «частной нотой».JQuery жить функция не обнаруживает изменения АЯКСА вызова

Я вызываю эту функцию, когда DOM готов.

jQuery(document).ready(function(){ 


     setInterval(function(){ 

      hideClose(); 

     },500); 

     jQuery('.commentbox').livequery(function(){ 

      hideClose(); 

     }); 

    }); 

Есть ajax-вызовы, которые изменяют DOM при добавлении заметок. Также есть опция удаления на заметке, которая выполняется через AJAX. Вызов функции внутри setInterval будет проверяться каждые полсекунды, потому что примечания могут быть добавлены в любой момент. Когда AJAX выполняется для добавления заметки, функция вызывается. Но функция не вызывается, когда заметка удаляется. Переменная "unreplied_hide_close_btn" не обновляется после удаления элемента. Из того, что я наблюдал, вызов AJAX для удаления заметки прерывает setInterval. Даже функция livequery не работает. Я также пробовал жить, на, связывать функции. Я хочу знать, есть ли способ проверить все изменения DOM, чтобы можно было использовать альтернативу setInterval. Если нет другого способа, кроме setInterval, пожалуйста, помогите мне в том, почему функция hideClose не получает вызов после удаления заметки.

Вот вызов AJAX для удаления заметки.

<a class="red_links conv-action-icon conv-actions-delete tooltip" href="#" onclick="if (confirm('Remove this from the ticket conversation?')) { new Ajax.Request('/helpdesk/tickets/4/notes/1000313643', {asynchronous:true, evalScripts:true, method:'delete'}); }; return false;" data-original-title="Delete" twipsy-content-set="true">Delete</a> 
+0

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

+0

Я также пробовал функцию .on. setInterval - это то, как не запускать функцию hideClose() после завершения запроса ajax. – Abhishek

ответ

0

Вы должны добавить функцию обратного вызова успеха в запрос на удаление AJAX. По запросу возвращается успех, он вызывается и вы запускаете функцию, которая удаляет ее из DOM.

Кроме того, я думаю, вам может потребоваться рассмотреть другой вариант, отличный от установки интервала для проверки сообщений. Идеально, что вы выполняете функцию только тогда, когда вам это нужно, а не просто проверяете, существует ли что-то.

+0

Невозможно добавить вызов вызова ajax, поскольку он находится в процессе производства. Тем не менее, события DOM можно обрабатывать на стороне клиента, где мы можем обновить код на шаблонах. Есть ли способ, кроме прослушивания успеха ajax? – Abhishek

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