2014-12-15 4 views
0

Я хочу отобразить настроенное оповещение, когда я нажимаю кнопку, но если я вхожу в систему, я хочу перенаправить на другую страницу. У меня есть это.Функция Javascript, вызванная сама по себе

 <div id="contentCalendar" class="col-md-3 images_1_of_4 text-center"> 
      <a><img onClick="show_alert();" id="rotateme" class="img-responsive img-circle center-block" src="web/images/calendaricon.png"/></a> 
      <h4><a href="#">Check our last events</a></h4> 

     </div> 
     <div id="myalert" class="alert alert-error"> 
     <a href="#" class="close" data-dismiss="alert">&times;</a> 
     <strong>Error!</strong> You must be logged in to see our calendar. 
     </div> 
     <script>  
     $('#myalert').hide(); 
     //What happen if you want to enter the events without loggin. 
     var logged_in = <?php echo ($logged_in); ?>; 
     function show_alert() 
     { 
      if(logged_in==true) 
      { 
       window.location="timeline.php"; 
      } 
      else 
      { 
       $('#myalert').show(); 
      } 
     } 
     </script> 

По какой-то причине работает как шарм, когда Logged_in является истинным, и я получаю перенаправление. Но когда я вышел, он просто не показывает предупреждение, даже если я вообще не нажимал кнопку.

Любые идеи?

+2

Попробуйте преобразовать значение, заданное с PHP, в логическое значение, поскольку оно, вероятно, читается как строка. – j08691

+0

Скорее всего, значение logged_in неверно в вашем случае успеха, но какое-то истинное значение –

ответ

1

Всегда, опять же, всегда, запустить все встраивать в JS через json_encode:

var logged_in = <?php echo json_encode($logged_in); ?>; 

Когда вы просто echo ложное значение в php, оно ничего не делает, тем самым нарушая ваш javascript.

+0

не имеет отношения к проблеме, не так ли? – Alex

+0

Эй, это точно проблема Теперь отлично работает. Я понятия не имел, что не кодирование будет разорвано, если я получу ложное значение. Поэтому я думаю, что мне просто повезло достичь этого. Большое спасибо. –

-1

Вам нужно обернуть скрипт каким-то событием. Попробуйте:

$(document).ready(function() { 
    var logged_in = <?php echo ($logged_in); ?>; 
     function show_alert() 
     { 
      if(logged_in==true) 
      { 
       window.location="timeline.php"; 
      } 
      else 
      { 
       $('#myalert').show(); 
      } 
     } 
}); 
+0

Можете ли вы объяснить, почему это необходимо? – putvande

+0

Мне кажется, что у него есть сценарий в теге тела или после него, обязательно поместите скрипт вне тега тела либо после, либо раньше (в – gaz

+0

операторы функций выполняются/определяются во время выполнения, а не когда события триггера, у них есть соответствующие scropes, хотя – Alex

1

Попробуйте эту строку:

var logged_in = <?php echo $logged_in ? 'true' : 'false'; ?>; 
0

Это предполагает, что код PHP выводит логическое значение правильно. Просмотр источника страницы позволит вам увидеть, правильно ли она выводится.

Теперь, глядя на код JavaScript.

Перемещение OnClick к якорю и отменить событие щелчка

<a href="#" onclick="show_alert(); return false"><img .... 

Лучшее решение сбросить обработчик событий рядный.

Прикрепите клик ненавязчиво и используйте preventDefault для отмены щелчка.

HTML:

<a href="timeline.php" class="calendar"><img .... 

JavaScript

var logged_in = <?php echo ($logged_in); ?>; 
$("a.calendar").on("click", function (e) { 
    if(!logged_in) { 
     e.preventDefault(); 
     $('#myalert').show(); 
    } 
}); 
+0

dont предлагают встроенные обработчики вообще – Alex

+0

@Alex просто фиксирует код OPs так, как они это делали. – epascarello

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