2015-04-14 4 views
0

Я пытаюсь изменить значение переменной внутри BEFORE_CLOSE события, не повезло до сих пор ... Я использую Kylefox's Jquery-modalИзменение значения переменной внутри Jquery покадрово события

HTML:

<div id="other" class="modal" style="display:none;"> 
<label for="form_otherName" class="label-important required">(*) Enter 'Other' Name </label> 
<input type="text" required="required" name="form[otherName]" class="round default-width-input" id="simple-input"> 
<a href="#close" rel="modal:close">Close window</a></div> 

Js:

 $('#form_submit').on('click', function (e) { 
     e.preventDefault(); 
     var page = $("#carousel").rcarousel("getCurrentPage"); 
     var employeeID = $("input[name='form[employeeID]']").val(); 
     var temp = ''; 
     if (page == 4) { 
      $('#other').modal(); 
      $('#other').on($.modal.BEFORE_CLOSE, function (event, modal) { 
       temp = $("input[name='form[otherName]']").val(); 
       console.log(temp); 
      }); 
      console.log('after event '+temp); 
      $.post("{{ path("working_letter_model",{'language': 'spanish'})}}", {model: page, idNumber: employeeID}, function (data) { 
       //do whatever with the response 

       }); 
      } 
} 

Что я делаю неправильно? В любом случае, чтобы исправить это?

Я читал о Js, используя переменные для значения вместо ссылки, но я не знаю, применимо ли это.

+0

Ваш следующий журнал событий на самом деле не происходит после события – aw04

+0

Вы не устанавливаете 'temp', пока пользователь не закрывает модальный. Вы вызываете 'console.log' при первом открытии страницы. – Barmar

+0

Я думаю, что я должен был разместить полный код, теперь все @Barmar – Splendonia

ответ

1

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

Событие зарегистрировано здесь, и обратный вызов предоставляется для выполнения при срабатывании события.

$('#other').on($.modal.BEFORE_CLOSE, function (event, modal) { 
    //this code does not execute yet! 
    temp = $("input[name='form[otherName]']").val(); 
    console.log(temp); //it shows the value 
}); 

Далее эта строка выполняется, а темп по-прежнему имеет начальное значение.

console.log('after event '+temp); //it returns empty 

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

temp = $("input[name='form[otherName]']").val(); 
console.log(temp); //it shows the value 
+0

Я думал, что поток был чем-то вроде: «Нажмите кнопку« Форма », появится модальное отображение, введите информацию, клик на кнопке« close modal », которая запускает событие, а затем существует событие для отправки информации через $ .post« – Splendonia

+0

№. Чтобы он работал таким образом, ваш пост должен быть внутри обработчика события before_close, а также ведения журнала. В настоящее время ваш $ .post страдает от одной и той же проблемы. – aw04

+0

, который сработал. Благодаря! – Splendonia

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