PHP / Jquery创建和操作表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP / Jquery创建和操作表相关的知识,希望对你有一定的参考价值。

我正在寻找一种方法,根据从下拉列表或滑块中选择的值向表中添加其他行。

把它作为一个非常基本的表格:

<html>
<head>
  <title></title>
</head>
<body>
<table border="1">
  <thead><tr>
    <th>Name</th>
    <th>A</th>
    <th>B</th>
    <th>C</th>
    <th>D</th>
    <th>E</th>
    <th>F</th>
  </tr>
  </thead><tbody>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td><input type="checkbox"></td>
    </tr>
  </tbody>
</table>
<br>
</body>
</html>

我想添加一个下拉列表或滑块,允许用户增加或减少可见的行数,并且可以完成。然后,在提交表单时,所有值都将正常提交。知道我怎么能这样做吗?

我还想在最后一列中使用一个复选框,允许用户将除第一行名称之外的所有值复制到他们检查的任何行。这可能吗?特别是如果他们更新第一行,其他人会更新?

指针或链接感激地收到:)

答案

干得好。自定义编码只为你

Live Demo

$(function(){
    var $tbody = $("#tb1"),$firstRow=$("#tb1 tr").eq(0);
    $('#defaultSlider').change(function(){
        var val = this.value;
        $('#currentValue').html(val);
        $tbody.find("tr:gt("+val+")").remove();
        for (var i = $("#tb1 tr").length;i<val;i++) {
            $tbody.append('<tr><td></td><td></td><td></td><td></td><td></td><td></td><td><input type="checkbox" class="copy"/></td></tr>');
        }
    }).change(); // Trigger the event on load, so the table is populated:

    $firstRow.find("input[type=text]").each(function(i) {
        $(this).on("blur",function() { // or keyup if useful
          var val = $(this).val();  
          var idx = i;
          var $checked = $("#tb1 tr").find("input[type=checkbox]:checked");
          $checked.each(function(i) {
            if (i>0) {
              // we may want to keep existing input 
              // perhaps even uncheck row if inout changed, but for now overwrite
              $(this).closest("tr").find("input").eq(idx).val(val);
            }
          });
        });
    });
    $tbody.on("change","tr .copy",function() {
        if (this.checked) {
            var $newRow = $firstRow.clone(true);
            $newRow.find("td:first input").val("")
            $(this).closest("tr").replaceWith($newRow);
        } 
    });
});
另一答案

而不是手动执行此操作,我建议使用Knockout或类似的东西。这个问题的好处是没有额外的id,类和这分开了关注点,现在javascript中没有令人讨厌的标记。此外,现在使用文本框中的值更新模型,因此您只需调用模型中的值即可获得任何值。

以下是Knockout的上述分支示例

http://jsfiddle.net/scottreeddev/pZhh7/

var my = {};
var lastValue = 1;

my.Row = function()
{
    var self = this;
    self.Name = ko.observable("");
    self.RowA = ko.observable("");
    self.RowB = ko.observable("");
    self.RowC = ko.observable("");
    self.RowD = ko.observable("");
    self.RowE = ko.observable("");
    self.RowF = ko.observable(false);
};

my.viewmodel = 
    {
        RowCollection: ko.observableArray([new my.Row()]),
        SliderValue: ko.observable(1)
    };

my.viewmodel.SliderValue.subscribe(function () {
    var sliderValue = parseInt(my.viewmodel.SliderValue());
    if(sliderValue > lastValue)
    {
        my.viewmodel.RowCollection.push(new my.Row());
    }
    else
    {
        my.viewmodel.RowCollection.pop();
    }
    lastValue = sliderValue;
}, my.viewmodel);

ko.applyBindings(my.viewmodel);

以上是关于PHP / Jquery创建和操作表的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的DOM操作

jquery基本操作

超级有用的9个PHP代码片段

php中的JQuery表

几个可以直接拿来用的jQuery代码片段

几个可以直接拿来用的jQuery代码片段