Как использовать наложение jQuery для получения переключателей во всплывающем окне?

Я следую этому руководству и спроектировал окно предупреждений (включая онлайн-демонстрацию),
http://jquerytools.org/demos/overlay/modal-dialog.html

Я мог бы изменить исходный код и добавить переключатели в предупреждающее сообщение. Исходный код приведен ниже (вам не нужно проходить весь код. Просто посмотрите место, где я добавил переключатели и место, где я получаю доступ к значению радиокнопки),

<!DOCTYPE html>
<html>
<!--
   This is a jQuery Tools standalone demo. Feel free to copy/paste.
   http://flowplayer.org/tools/demos/

   Do *not* reference CSS files and images from flowplayer.org when in
   production Enjoy!
-->
<head>
  <title>jQuery Tools standalone demo</title>

    <!-- include the Tools -->
  <script src="jquery.tools.min.js"></script>

  <!-- standalone page styling (can be removed) -->
  <link rel="shortcut icon" href="/media/img/favicon.ico">
  <link rel="stylesheet" type="text/css"
        href="/media/css/standalone.css"/>

  <style>
    .modal {
    background-color:#fff;
    display:none;
    width:350px;
    height:250px;
    padding:15px;
    text-align:left;
    border:2px solid #333;

    opacity:0.8;
    -moz-border-radius:6px;
    -webkit-border-radius:6px;
    -moz-box-shadow: 0 0 50px #ccc;
    -webkit-box-shadow: 0 0 50px #ccc;
  }

  .modal h2 {
    background:url(/media/img/global/info.png) 0 50% no-repeat;
    margin:0px;
    padding:10px 0 10px 45px;
    border-bottom:1px solid #333;
    font-size:20px;
  }
  </style>
</head>
<body><!-- the triggers -->
<p>
  <button class="modalInput" rel="#yesno">Yes or no?</button>
  <button class="modalInput" rel="#prompt">User input</button>
</p>

<!-- yes/no dialog -->
<div class="modal" id="yesno">
  <h2>This is a modal dialog</h2>

  <p>
    You can only interact with elements that are inside this dialog.
    To close it click a button or use the ESC key.
  </p>

  <!-- yes/no buttons -->
  <p>
    <button class="close"> Yes </button>
    <button class="close"> No </button>
  </p>
</div>



<!-- user input dialog -->
<div class="modal" id="prompt">
  <h2>This is a modal dialog</h2>

  <p>
    You can only interact.
  </p>

  <!-- input form. you can press enter too -->
  <form>
    //Added radio buttons
    <input type="radio" name="sex" value="male" id="male"> Male<br />
    <input type="radio" name="sex" value="female" id="female"> Female<br />

    <button type="submit">Submit</button>

  </form>
  <br />

</div>

<script>
$(document).ready(function() {
    var triggers = $(".modalInput").overlay({

      // some mask tweaks suitable for modal dialogs
      mask: {
        color: '#ebecff',
        loadSpeed: 200,
        opacity: 0.9
      },

      closeOnClick: false
  });

    var buttons = $("#yesno button").click(function(e) {

      // get user input
      var yes = buttons.index(this) === 0;

      // do something with the answer
      triggers.eq(0).html("You clicked " + (yes ? "yes" : "no"));
  });

    $("#prompt form").submit(function(e) {

      // close the overlay
      triggers.eq(1).overlay().close();

      // get user input
      var input = $("input", this).val(); // this input value always return 'male' as the output  



      // do something with the answer
      triggers.eq(1).html(input);

      // do not submit the form
      return e.preventDefault();
  });
  });
</script>
</body>
</html>

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

Но когда я нажимаю кнопку «отправить» button Он всегда возвращает мне "мужчина" на выходе.
Может ли кто-нибудь помочь мне решить эту проблему? Мне нужно получить вывод кнопок Radin на переменную 'input'


person Roshanck    schedule 05.04.2012    source источник
comment
Обратитесь к этому [1]: stackoverflow.com/questions/10011743/   -  person keerthi    schedule 13.04.2012


Ответы (4)


Используйте это, чтобы открыть окно. В HTML оставьте переключатель.

<table style="width: 100%; border: 0px;" cellpadding="3" cellspacing="0">
  <tr>
     <td class="web_dialog_title">Email this Article</td>
     <td class="web_dialog_title align_right">
        <a href="#" id="btnClose">Close</a>
     </td>
  </tr>
<TR><TD>

Используйте переключатель.

</TD></TR>
 </table>
  <script type="text/javascript">

$(document).ready(function ()
{
  $("#btnShowSimple").click(function (e)
  {
     ShowDialog(false);
     e.preventDefault();
  });



  $("#btnClose").click(function (e)
  {
     HideDialog();
     e.preventDefault();

  });

$(document).keyup(function(e) {
 if (e.keyCode == 27) {
     HideDialog(); }
});

 });

function ShowDialog(modal)
{
  $("#overlay").show();
  $("#dialog").fadeIn(300);

  if (modal)
  {
     $("#overlay").unbind("click");
  }
  else
  {
     $("#overlay").click(function (e)
     {
        HideDialog();
     });
  }
}

function HideDialog()
{
  $("#overlay").hide();
  $("#dialog").fadeOut(300);
} 

person qwerty    schedule 24.05.2012

вы изменили ввод типа текста на ввод типа радио. так что вы должны изменить

var input = $("input", this).val();

с этим

var input = $("input:checked", this).val();
person M Rostami    schedule 13.04.2012

perdickss дает очень хороший ответ на этот пример. Но это не сработает, если на странице есть несколько входов. Итак, вы должны использовать что-то вроде этого:

 var input = $("input[name=FIELD_NAME]:checked", this).val();

Где FIELD_NAME - это имя, которое у вас есть для входных данных, которые вы хотите проверить. В этом случае код будет выглядеть так:

var input = $("input[name=sex]:checked", this).val();
person Baduca Alexandru    schedule 24.04.2012

Как вы написали в своем коде:

<form>
<input type="radio" name="sex" value="male" id="male"> Male<br />
<input type="radio" name="sex" value="female" id="female"> Female<br />

<button type="submit">Submit</button>
</form>

В вашем #prompt form есть два поля ввода, поэтому, когда вы получаете значение с помощью этого кода:

var input = $("input", this).val();

Вы всегда будете получать значение первого совпавшего элемента (это male).

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

var input = $("input[name=sex]:checked", this).val();
person Wirone    schedule 31.05.2012