javascript - 如何使用jquery在文本框下方显示消息

标签 javascript jquery

我已经创建了一个应用程序 - 大部分已完成,但我有一个小问题:如何在文本框下方显示消息。

如果您单击编辑按钮,文本框将出现在可编辑选项的每一行,但我想在出现一个可编辑选项的文本框下方显示文本剩余计数.

我执行了以下操作,但效果不佳。

$(function() {

  $(".edit").click(function(e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    var btn = $(this);
    var td = btn.closest("tr").find(".editable");


    //Save current text in td data attribute

    if (btn.text() === "edit") {
      //store the current value only on click of EDIT and not on save
      var currentValue = td.text();
      $(td).data("current-value", currentValue);
      td.html("<input type='text' value=" + currentValue + " />");
      btn.html("save");
    } else {
      if (td.find("input").val() == "") {

        alert("please fill the text box")
      } else {
        td.html(td.find("input").val());
        btn.html("edit");
      }
    }

    var text_max = 25;
    $(td.find("input")).html(text_max + ' characters remaining');

    $(td.find("input")).keyup(function() {
      var text_length = td.find("input").val().length;
      var text_remaining = text_max - text_length;
      td.find("input").next().add("div").html(text_remaining + ' characters remaining');


    });


  });

  $(".cancel").click(function(e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    var td = $(this).closest("tr").find(".editable");

    //Read data attribute to get saved text
    var currentValue = $(td).data("current-value");
    if (currentValue != "") {
      td.html(currentValue);


      //Set attribute to empty string
      $(td).data("current-value", "");
    } else {


    }
    $(this).parents('tr').find(".edit").html("edit");
  });



});
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}

li {
  float: left;
  margin-left: 2px;
  padding: 2px;
}

li a {
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  margin: 2px;
}

li a:hover {
  background-color: #111;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tabledata">
  <thead>
    <th>RecID</th>
    <th>Col1</th>
    <th>opt</th>
  </thead>
  <tr>
    <td>
      <a>
        <div class="nestedtable">Tableshowing no need edit</div>
      </a><span class="editable">RecID1</span></td>
    <td>Val1.1</td>
    <td>
      <ul>
        <li> <a class="edit">edit</a></li>
        <li> <a class="cancel">cancel</a></li>
      </ul>


    </td>
  </tr>
  <tr>
    <td>
      <a>
        <div class="nestedtable">Tableshowings no need edit</div>
      </a><span class="editable">RecID2</span></td>
    <td>Val2.1</td>
    <td>
      <ul>
        <li> <a class="edit">edit</a></li>
        <li> <a class="cancel">cancel</a></li>
      </ul>
    </td>
  </tr>
  <tr>
    <td>
      <a>
        <div class="nestedtable">Tableshowing no need edit</div>
      </a><span class="editable">RecID3</span></td>
    <td>Val3.1</td>
    <td>
      <ul>
        <li> <a class="edit">edit</a></li>
        <li> <a class="cancel">cancel</a></li>
      </ul>
    </td>
  </tr>
</table>

<强> Jsfiddle

最佳答案

只需更改可编辑跨度元素的定位,将其设置在nestedTable div之前

$(function () {
		
    $(".edit").click(function (e) {
    	e.preventDefault();
        e.stopImmediatePropagation();
        var btn = $(this);
        var td = btn.closest("tr").find(".editable");
        
   
        //Save current text in td data attribute
        
        if(btn.text() === "edit")
        {
        //store the current value only on click of EDIT and not on save
          var currentValue = td.text();
          $(td).data("current-value", currentValue);
        	td.html("<input type='text' value="+currentValue+" />");
            btn.html("save");
        }
        else
        {
         if(td.find("input").val()==""){
        
        alert("please fill the text box")
        }else{
        	 td.html(td.find("input").val());
            btn.html("edit");
            }
        }
        
     var text_max = 25;
    $(td.find("input")).html(text_max + ' characters remaining');

    $(td.find("input")).keyup(function() {
        var text_length = td.find("input").val().length;
        var text_remaining = text_max - text_length;
        td.find("input").next().add( "div" ).html(text_remaining + ' characters remaining');
  
 
    });
    

    });
    
     $(".cancel").click(function (e) {
    	e.preventDefault();  
        e.stopImmediatePropagation();
        var td = $(this).closest("tr").find(".editable");
        
        //Read data attribute to get saved text
        var currentValue = $(td).data("current-value");
        if(currentValue != "")
        {
        	td.html(currentValue);
            

            //Set attribute to empty string
            $(td).data("current-value", "");
        }else{
        
        
        }
        $(this).parents('tr').find(".edit").html("edit");
    });
    
    

});
ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background-color: #333;
}

li {
    float: left;
    margin-left:2px;
    padding:2px;
}

li a {
    display: inline-block;
    color: white;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    margin:2px;
}

li a:hover {
    background-color: #111;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tabledata">
    <thead>
        <th>RecID</th>
        <th>Col1</th>
        <th>opt</th>
    </thead>
    <tr>
    <td><span class="editable">RecID1</span><a><div class="nestedtable">Tableshowing no need edit</div></a></td>
        <td>Val1.1</td>
        <td>
        <ul>
        <li> <a class="edit">edit</a></li>
         <li> <a class="cancel">cancel</a></li> 
        </ul>
       
       
        </td>
    </tr>
    <tr>
    <td><span class="editable">RecID2</span><a><div class="nestedtable">Tableshowings no need edit</div></a></td>
        <td>Val2.1</td>
        <td>    <ul>
        <li> <a class="edit">edit</a></li>
         <li> <a class="cancel">cancel</a></li> 
        </ul></td>
    </tr>
    <tr>
        <td><span class="editable">RecID3</span><a><div class="nestedtable">Tableshowing no need edit</div></a></td>
        <td>Val3.1</td>
        <td>    <ul>
        <li> <a class="edit">edit</a></li>
         <li> <a class="cancel">cancel</a></li> 
        </ul></td>
    </tr>
</table>

关于javascript - 如何使用jquery在文本框下方显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792706/

相关文章:

javascript - 从子文件夹访问时不显示 css 图像

javascript - 使用 CSS background-size 时获取背景图像的新高度 : cover?

jquery - 粘性页脚 + 悬停问题

javascript - TestCafe 中是否有一项功能可以帮助生成附有失败测试用例屏幕截图的报告?

javascript - jquery 分页 - 嵌套在 href 中的元素不链接到正确的页面

javascript - jQuery 在 clone() 上为输入和类添加唯一标识符

javascript - jQuery 对话框 : How do I alter the close tag style?

javascript - 使用 jQuery 滚动到某个元素

javascript - 是否有一个 Regex 表达式来匹配每个不在引号中的内容

javascript - 如何防止 ng-model 覆盖指令生成的输入文本的值