javascript - 将元素保持在动态变化面板的底部

标签 javascript jquery html css twitter-bootstrap

我正在使用 bootstrap,我有一些文本字段,当它们被动态添加时,这些文本字段会使面板变大。现在,这些文本字段位于面板元素内,文本字段大小为 col-lg-9,紧挨着它的 col-lg-3 中有更多空间。

我想在那个 col-lg-3 div 中放置一个按钮,该按钮将始终位于面板的底部 - 因此,如果面板高度由于新文本字段而增加,该按钮仍保持在底部。我已经尝试过绝对和相对定位,但没有任何帮助 + 指出的一些方法破坏了可扩展性(我确实需要保留)。

我正在添加我的代码:

  <div class="panel panel-default"> 
  <div class="panel-heading">
    <h3 class="panel-title panel-header-text">Sisesta nimed, mis pannakse tabelisse</h3>
  </div>
  <div class="panel-body">
    <div class="col-lg-9" id="inputcontainer">
        <h4>Sisestamisel tekib uus väli (TAB-iga saab vahetada rida). Tühjasid välju ei arvestata!</h4>
        <div class="input-group input-group-lg pdgtop">
          <span class="input-group-addon" id="basic-addon1">1.</span>
          <input type="text" id="one" class="form-control text-controller" placeholder="Sisesta nimi siia">
        </div>
    </div>
    <div class="col-lg-3 konteiner">
        <button type="button" class="btn btn-success buttonel">Valmista tabel</button>
    </div>
  </div>

JavaScript:

/*
    #FN01: This function handles the creation of new text fields according to the change in the textfield.
*/
var createNew = true;
var counter = 2;
function getNewInsertion() { 
    var container = document.getElementById("inputcontainer");
    var inputs = document.getElementsByClassName("text-controller");
    var lastField = inputs[inputs.length-1];

    if (document.activeElement.value.length == 0 && createNew == false){ //if new element is chosen createNew will be set true
        createNew = true;
    }
    else if (createNew == true && lastField.value.localeCompare("") != 0 ){
        createNew = false;

        //Creates Input Field
        var input = document.createElement("input");
        input.type = "text";
        input.className = "form-control text-controller"; 
        input.placeholder = "Sisesta siia nimi";
        //Creates Span to hold the count
        var span = document.createElement("span");
        span.textContent = counter;
        span.className = "input-group-addon";
        //Creates input group to put span & input field together
        var inputgroup = document.createElement("div");
        inputgroup.className = "input-group input-group-lg";
        inputgroup.appendChild(span);
        inputgroup.appendChild(input);

        container.appendChild(inputgroup);
        counter += 1;
    }

    return createNew;
}
/*
    #FN02: This is the function to delete the last field (empty) in case the one before last is empty.
*/
function canWeDeleteField(){
    var inputs = document.getElementsByClassName("input-group");
    var lastInput = inputs[inputs.length-1];
    var lastArr = lastInput.childNodes
    if (inputs.length < 2){
        var last = lastArr[3];
    }
    else{
        var last = lastArr[1];
    }
    console.log(lastArr);
    if (inputs.length >= 2){
        var last_prev_Input = inputs[inputs.length-2];
        var last_prev_Arr = last_prev_Input.childNodes
        if (inputs.length == 2){ 
            var last_prev = last_prev_Arr[3];
        }
        else{
            var last_prev = last_prev_Arr[1];
        }
        if (last.value.localeCompare("") == 0 && last_prev.value.localeCompare("") == 0){
            lastInput.parentNode.removeChild(lastInput);
            counter = counter - 1;
        }
    }
}
/*
    #FN03: The call-out function which is triggered when key is pressed while focus is on the textfield.
*/
$(function() {
    $("#inputcontainer").bind("paste cut keydown",function(e) {
        getNewInsertion();
        canWeDeleteField();
    })
}); 

和 CSS:

.konteiner {
    position: relative;
}

.buttonel {
    width: 95%;
    padding-right: 1%;
    position: absolute;
}

最佳答案

您可以在以下链接中查看问题的解决方案 Bootstrap equal-height columns experiment .

基本上,您必须将列包装在包含类“row”和“row-eq-height”的 div 元素中。

这是结果的一个片段(使用您的代码):

<!DOCTYPE html>
<html>

<head>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  <link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.min.css">

  <style type="text/css">
    .row-eq-height {
      display: -webkit-box;
      display: -webkit-flex;
      display: -ms-flexbox;
      display: flex;
    }
    .buttonel {
      position: absolute;
      bottom: 0;
    }
  </style>

</head>

<body>

  <div class="panel panel-default">

    <div class="panel-heading">
      <h3 class="panel-title panel-header-text">Sisesta nimed, mis pannakse tabelisse</h3>
    </div>

    <div class="panel-body">

      <div class="row row-eq-height">

        <div class="col-lg-9 col-md-9" id="inputcontainer">

          <h4>Sisestamisel tekib uus väli (TAB-iga saab vahetada rida). Tühjasid välju ei arvestata!</h4>

          <div class="input-group input-group-lg pdgtop">
            <span class="input-group-addon" id="basic-addon1">1.</span>
            <input type="text" id="one" class="form-control text-controller" placeholder="Sisesta nimi siia">
          </div>

        </div>

        <div class="col-lg-3 col-md-3">
          <button type="button" class="btn btn-success buttonel">Valmista tabel</button>
        </div>

      </div>

    </div>

  </div>

  <script type="text/javascript">
    var createNew = true;
    var counter = 2;

    function getNewInsertion() {
        var container = document.getElementById("inputcontainer");
        var inputs = document.getElementsByClassName("text-controller");
        var lastField = inputs[inputs.length - 1];

        if (document.activeElement.value.length == 0 && createNew == false) { //if new element is chosen createNew will be set true
          createNew = true;
        } else if (createNew == true && lastField.value.localeCompare("") != 0) {
          createNew = false;

          //Creates Input Field
          var input = document.createElement("input");
          input.type = "text";
          input.className = "form-control text-controller";
          input.placeholder = "Sisesta siia nimi";
          //Creates Span to hold the count
          var span = document.createElement("span");
          span.textContent = counter;
          span.className = "input-group-addon";
          //Creates input group to put span & input field together
          var inputgroup = document.createElement("div");
          inputgroup.className = "input-group input-group-lg";
          inputgroup.appendChild(span);
          inputgroup.appendChild(input);

          container.appendChild(inputgroup);
          counter += 1;
        }

        return createNew;
      }
      /*
       #FN02: This is the function to delete the last field (empty) in case the one before last is empty.
       */

    function canWeDeleteField() {
        var inputs = document.getElementsByClassName("input-group");
        var lastInput = inputs[inputs.length - 1];
        var lastArr = lastInput.childNodes
        if (inputs.length < 2) {
          var last = lastArr[3];
        } else {
          var last = lastArr[1];
        }
        console.log(lastArr);
        if (inputs.length >= 2) {
          var last_prev_Input = inputs[inputs.length - 2];
          var last_prev_Arr = last_prev_Input.childNodes
          if (inputs.length == 2) {
            var last_prev = last_prev_Arr[3];
          } else {
            var last_prev = last_prev_Arr[1];
          }
          if (last.value.localeCompare("") == 0 && last_prev.value.localeCompare("") == 0) {
            lastInput.parentNode.removeChild(lastInput);
            counter = counter - 1;
          }
        }
      }
      /*
       #FN03: The call-out function which is triggered when key is pressed while focus is on the textfield.
       */
    $(function() {
      $("#inputcontainer").bind("paste cut keydown", function(e) {
        getNewInsertion();
        canWeDeleteField();
      })
    });
  </script>

</body>

</html>

希望对您有所帮助!

关于javascript - 将元素保持在动态变化面板的底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32671133/

相关文章:

javascript - 通过 jQuery AJAX 将字符串数组传递给 C# WebMethod

javascript - 如何从 Firebase 和我的应用程序中删除评论?

javascript - 如何确保定义 img.onload 函数的脚本在 img 之前加载?

Javascript 通过解构重新分配 let 变量

javascript - 站点在加载期间崩溃 2 秒

javascript - 我如何为从数组创建的 <button> 提供它们自己的单独 id?

jquery - jquery 中的 addClass() removeClass() 问题

html - 用静态 HTML 网站替换 Tomcat 服务器上的网站

javascript - 使用 JavaScript 创建 CSS 选择器

javascript - JS 中的词法作用域