简体   繁体   English

Twitter Bootstrap 2模态表单对话框

[英]Twitter Bootstrap 2 modal form dialogs

I have the following dialog form : 我有以下对话框形式:

<div class='modal' id='myModal'>
  <div class='modal-header'>
    <a class='close' data-dismiss='modal'>×</a>
    <h3>Add Tags</h3>
  </div>

  <div class='modal-body'>
    <form accept-charset="UTF-8" action="/tagging" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="mCNvbvoPFWhD7SoJm9FPDh+BcRvCG3d16P+oOFACPuc=" /></div>
        <input id="tags_string" name="tags_string" type="text" value="luca" />
        <input id="id" name="id" type="hidden" value="4f1c95fd1d41c80ff200067f" />
    </form>
  </div>

  <div class='modal-footer'>
    <div class='btn btn-primary'><input name="commit" type="submit" value="Add tag" /></div>
  </div>
</div>

and his JS : 和他的JS:

<script>
  //<![CDATA[
    $(function() {
      // wire up the buttons to dismiss the modal when shown
      $("#myModal").bind("show", function() {
        $("#myModal a.btn").click(function(e) {
          // do something based on which button was clicked
          // we just log the contents of the link element for demo purposes
          console.log("button pressed: "+$(this).html());
          // hide the dialog box
          $("#myModal").modal('hide');
        });
      });
      // remove the event listeners when the dialog is hidden
      $("#myModal").bind("hide", function() {
          // remove event listeners on the buttons
          $("#myModal a.btn").unbind();
      });
      // finally, wire up the actual modal functionality and show the dialog
      $("#myModal").modal({
        "backdrop" : "static",
        "keyboard" : true,
        "show" : true // this parameter ensures the modal is shown immediately
      });
    });
  //]]>
</script>

When I click x, which is <a class='close' data-dismiss='modal'>×</a> , the form close down leaving me on the current page, while I'd like to go on the hamepage. 当我点击x,这是<a class='close' data-dismiss='modal'>×</a> ,表单关闭,让我留在当前页面上,而我想继续浏览hamepage。

Also "Add tag" botton, which is <div class='btn btn-primary'><input name="commit" type="submit" value="Add tag" /></div> don't do nothing, while clicking jaust ENTER on the keyboard do the job and I'd like clicking "Add tag" did the same. 另外“添加标签”按钮,这是<div class='btn btn-primary'><input name="commit" type="submit" value="Add tag" /></div>什么都不做,点击键盘上的jaust ENTER完成工作,我想点击“添加标签”也是这样做的。

I'm not so skilled on JS and front-end prog, so any help is welcome. 我对JS和前端编程不太熟练,所以欢迎任何帮助。

Your submit button is outside of the form tags. 您的提交按钮位于表单标记之外。
It won't know what form to submit. 它不知道提交什么形式。

Use javascript to connect it to the form. 使用javascript将其连接到表单。

<div class='modal-body'>
    <form id="modal-form" accept-charset="UTF-8" action="/tagging" data-remote="true" method="post">
        <input name="something" value="Some value" />
    </form>
  </div>

<div class='modal-footer'>
    <a id="modal-form-submit" class='btn btn-primary' href="#">Submit</a>
</div>

<script>
  $('#modal-form-submit').on('click', function(e){
    // We don't want this to act as a link so cancel the link action
    e.preventDefault();

    // Find form and submit it
    $('#modal-form').submit();
  });
</script>

As for the <a class='close' data-dismiss='modal'>×</a> that is supposed to link to the homepage, why not just remove the data-dismiss='modal' and make it act like a normal link using a standard href='home.html' . 对于应该链接到主页的<a class='close' data-dismiss='modal'>×</a> ,为什么不删除data-dismiss='modal'并使其表现得像使用标准href='home.html'普通链接。

Here is some additional code to point you in the right direction for using AJAX to submit the form: 下面是一些额外的代码,指出您使用AJAX提交表单的正确方向:

// Since we want both pressing 'Enter' and clicking the button to work
// We'll subscribe to the submit event, which is triggered by both

$('#modal-form').on('submit', function(){

  //Serialize the form and post it to the server
  $.post("/yourReceivingPage", $(this).serialize(), function(){

    // When this executes, we know the form was submitted

    // To give some time for the animation, 
    // let's add a delay of 200 ms before the redirect
    var delay = 200;
    setTimeout(function(){
      window.location.href = 'successUrl.html';
    }, delay);

    // Hide the modal
    $("#my-modal").modal('hide');

  });

  // Stop the normal form submission
  return false;
});

To get the submit button work put it inside the form. 要获取提交按钮的工作,请将其放在表单中。

<div class="modal">
    <form id="modal-form" action="/tagging" data-remote="true" method="post">
        <div class="modal-header">
            <a class="close" data-dismiss="modal">×</a>
            <h3>A Modal Form</h3>
        </div>
        <div class="modal-body">
            <input name="something" value="Some value" />
        </div>
        <div class="modal-footer">
            <a href="#" class="btn" data-dismiss="modal">Cancel</a>
            <input type="submit" value="Save" class="btn btn-primary" />
        </div>
    </form>
</div>

However, this adds an unexpected margin at the bottom of the modal. 但是,这会在模态的底部增加意外的余量。 Bootstrap 2.0.2 introduced the modal-form class to fix this or you can fix it yourself with a style definition like: Bootstrap 2.0.2引入了modal-form来修复它,或者您可以使用样式定义自己修复它:

.modal > form {
    margin-bottom: 0;
}

For linking to another page when closing the modal I go along with TheShellfishMeme 为了在关闭模态时链接到另一个页面,我将使用TheShellfishMeme

As for the × that is supposed to link to the homepage, why not just remove the data-dismiss='modal' and make it act like a normal link using a standard href='home.html'. 对于应该链接到主页的×,为什么不删除data-dismiss ='modal'并使其使用标准href ='home.html'使其像普通链接一样。

With HTML5 you can have something like this: 使用HTML5,您可以使用以下内容:

<div class="modal" id="myModal">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Add Tags</h3>
  </div>

  <div class="modal-body">
    <form id="my_form" accept-charset="UTF-8" action="/tagging" data-remote="true" method="post">
        <div style="margin:0;padding:0;display:inline">
          <input name="utf8" type="hidden" value="&#x2713;" />
          <input name="authenticity_token" type="hidden" value="mCNvbvoPFWhD7SoJm9FPDh+BcRvCG3d16P+oOFACPuc=" />
        </div>
        <input id="tags_string" name="tags_string" type="text" value="luca" />
        <input id="id" name="id" type="hidden" value="4f1c95fd1d41c80ff200067f" />
    </form>
  </div>

  <div class="modal-footer">
    <div class="btn btn-primary"><input name="commit" type="submit" value="Add tag" form="my_form" /></div>
  </div>
</div>

This called in HTML5 form-associated element of-course if you need to support all browsers + old ones then you need to go with JavaScript, but you can use JavaScript as a fallback :) 如果您需要支持所有浏览器+旧版本,那么这需要支持HTML5 表格相关元素 ,那么您需要使用JavaScript,但是您可以使用JavaScript作为后备:)

The problem for submitting form lies within bootstrap own JS modal library (bootstrap-modal.js) - basicaly submit event is being prevented due to line #204: ev.preventDefault (why?). 提交表单的问题在于bootstrap自己的JS模态库(bootstrap-modal.js) - 由于第204行: ev.preventDefault (为什么?),基本提交事件被阻止了。

My solution was to add: 我的解决方案是添加:

if(!$(e.target).parents('form'))
   e.preventDefault();

however I don't know what problems it will spawn. 但是我不知道它会产生什么问题。

FYI You can do the following (written in jade): 仅供参考您可以执行以下操作(以玉写):

.modal.hide.fadel
  form.modal-form
    .modal-header
        button.close type='button' data-dismiss="modal" x
        h3= t 'translation'
    .modal-body
        p hello
    .modal-footer
        button.btn data-dismiss="modal" href="#" = t 'close'
        a.btn.btn-primary data-dismiss="modal" data-remote="true" href="#"= t 'form.submit'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM