Jquery — Вывод диалогового окна пользовательского интерфейса по ссылке href

#jquery #jquery-ui-dialog

#jquery #jquery-ui-dialog

Вопрос:

Итак, у меня есть это прямо здесь:

Это очень простое диалоговое окно пользовательского интерфейса, которое отсчитывает время до перенаправления моего пользователя. Если они нажимают за пределами поля, оно отменяется.

Могу ли я в любом случае создать это так, чтобы это выполнялось при нажатии на URL?

Я также хочу передать один параметр (URL, на который пользователь будет перенаправлен)

 <!DOCTYPE html>
<html>
<head>

  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>



  <script type="text/javascript">
    function setClosed(){
      isClosed=true;
    }
    function alertBlah() {   
       if (!isClosed)
   $(location).attr('href',"http://www.google.com").delay(3000);
}

   //Wait for the document to load
   $(document).ready(function() {
      isClosed=false;

  //Create the dialog and open it
  $("#dialog").dialog();
  $("p.5").fadeOut(0).delay(500).fadeIn(400);
  $("font.4").fadeOut(0).delay(1000).fadeIn(400);
  $("font.3").fadeOut(0).delay(1500).fadeIn(400);
  $("font.2").fadeOut(0).delay(2000).fadeIn(400);
  $("font.1").fadeOut(0).delay(2500).fadeIn(400);
  $("h2.by").fadeOut(0).delay(3000).fadeIn(400);

  setTimeout(alertBlah,3500);

  //Bind to the ui-widget-overlay and watch for when it is clicked
  $('.ui-widget-overlay').live("click", function() {
     //Close the dialog
     $("#dialog").dialog("close");
     setClosed();

  }); 


  });

 </script>
 </head>

 <body style="font-size:62.5%;">




   <div class="ui-widget-overlay" >
      <a href="#" class="close">Leave My Site</a>

      <div id="dialog" class="flora" title="Leaving my site" ><center>Leaving in...
         <font class="5">5..</font>
         <font class="4">4..</font>
         <font class="3">3..</font>
         <font class="2">2..</font>
         <font class="1">1..</font>

  </br>
  <h2 class="by">Good By!</h2>
  </center>
</div>
  

Ответ №1:

Допустим, у вас есть привязка:

 <a href="#" class="close">Leave My Site</a>
  

Вы могли бы сделать что-то вроде:

 $('a.close').click(function(e){
    //$(this) would be your anchor
    //awesome magic here
    e.preventDefault();
});
  

e.preventDefault является важной частью, поскольку она предотвращает выполнение действия anchors по умолчанию.

Комментарии:

1. Да, но как я могу создать диалоговое окно. Например, я не понимаю, как я заполняю внутреннюю часть диалогового окна, не связывая его с тегом div.

2. ну, если вы используете jquery ui и у вас уже есть диалоговое окно, вы можете «открыть» его, просто вызвав $ (бла). диалоговое окно (‘открыть’). это может быть то, что указано в теле обработчика кликов выше.

3. Большое спасибо. Извините, я сначала этого не понял.

4. 1 за операцию, поскольку они хотели сделать это для вас, но у них не хватило репутации. =D

Ответ №2:

Посмотрите эту рабочую демонстрацию jsFiddle:

У вас может быть следующий HTML:

 <a href="http://www.google.com">Exit to Google</a>
<a href="http://www.stackoverflow.com">Exit to StackOverflow</a>
  

Тогда существующий JavaScript, который у вас есть в разделе head, можно было бы изменить следующим образом:

 function setClosed() { 
    isClosed = true; 
}

function alertBlah() {
    if (!isClosed) { $(location).attr('href', url).delay(3000); } 
}

$(function() {

    $("a").click(function(e) {

        e.preventDefault();

        isClosed = false;
        url = this.href;

        //Create the dialog and open it
        $("#dialog").dialog();
        $("p.5").fadeOut(0).delay(500).fadeIn(400);
        $("font.4").fadeOut(0).delay(1000).fadeIn(400);
        $("font.3").fadeOut(0).delay(1500).fadeIn(400);
        $("font.2").fadeOut(0).delay(2000).fadeIn(400);
        $("font.1").fadeOut(0).delay(2500).fadeIn(400);
        $("h2.by").fadeOut(0).delay(3000).fadeIn(400);

        setTimeout(alertBlah,3500);

        //Bind to the ui-widget-overlay and watch for when it is clicked
        $('.ui-widget-overlay').live("click", function() {
            //Close the dialog
            $("#dialog").dialog("close");
            setClosed();
        });
    }); 
});
  

Комментарии:

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