Jquery - (ajax async: true) размер элемента не отвечает

0

Я использую плагин jQuery и в опции " onFinish " я делаю некоторую логику. Ничего особенного. См. Ниже. У меня есть div, который я создал в скрипте с именем $ message, затем перебираю список переключателей с классом .daily_persons. Если какой-либо из радиоисточников не соответствует моему условию, я добавляю тег абзаца к начальному div. На данный момент проблем нет.

Проблема заключается в том, что начальный div используется для отображения диалога, только если он не пуст. Я пробовал много вещей, дети-джеки, имеет ("р") длину; Кажется, что ничто не работает if($message.size()>0) всегда оценивается как 1 > 0 = true

onFinish: function() {
    var $message = $('<div title="Sessions Not Available"></div>');                                  

    $('.daily_persons:checked').each(function() {
        var mylimit = 0;
        var $this = $(this);                

        $.get("<?php echo base_url();?>register/chackSessAvaiable",
                { id: $this.val()}, function(data) {
            $this.attr('area') == "biksha" ? mylimit = 3 : mylimit = 10; 
            if (!(data < mylimit)) {                       
                $message.append("<p>"+$this.attr('humandate')+"</p>");
                $this.prop("checked", false);
                $this.prop("disabled", true);
                updateCost();
            }
        });
    }); 

    if ($message.size() > 0) {
        $message.dialog({
            resizable: false,
            modal: true,
            width: 350,
            buttons: {
                "OK": function() {
                    $(this).dialog("close");
                    $message.html('');
                }
            }
        });               
    } else {
        alert("proceed");                    
    }   
}

Есть идеи?

  • 0
    size () не рекомендуется, лучше вместо этого использовать свойство .length. Тем не менее, это не ваша проблема здесь. Похоже, вы хотите проверить, добавлены ли некоторые <p> в $ message DIV. Но так как вы добавляете <p> tgs в функцию обратного вызова $ .get (), вы можете проверить это здесь. Настройте свою логику внутри обратного вызова $ .get (), а затем нет необходимости проверять, пусто ли сообщение $ или нет. Потому что да, $ .get () является асинхронным
  • 0
    Спасибо A. Wolff, ваш намек на то, что $ .get () async, указывает мне правильный путь. Отсюда и мой ответ.
Теги:

1 ответ

0
Лучший ответ

Итак, все, что вам нужно, это сделать асинхронный вызов aync: false, как это

            onFinish: function(){
           var $message = $('<div title="Sessions Not Available"></div>');                                  
            $('.daily_persons:checked').each(function(){
                var mylimit = 0;
                var $this = $(this);
                $.ajax({
                  type: 'GET',
                  url: "<?php echo base_url();?>register/chackSessAvaiable",
                  data: { id: $this.val()},
                  success: function(data){
                    $this.attr('area')=="biksha" ? mylimit = 3 : mylimit = 10; 
                    if(!(data < mylimit)){                       
                        $message.append("<p>"+$this.attr('humandate')+"</p>");
                        $this.prop("checked", false);
                        $this.prop("disabled",true);
                        updateCost();
                    }                    
                  },
                  dataType: "json",
                  async:false
                });                
            }); 
alert($message.children().length);

            }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню