javascript - 选择items ids到同一行input单独保存

标签 javascript jquery css html-table

我正在尝试创建一个界面,我可以在其中为每一行选择元素并单独保存(或在必要时保存整个页面)。

table

在上面的例子中,第一行是正确的,但是第二行应该只是“ru”,它也从第一行带来相同的内容..

如下例,由于我对整个页面使用相同的函数,但我在为每一行分隔元素时遇到了一些麻烦:

$(function() {
  var selec = [];
  $('#list li').click(function() {

    if ($(this).hasClass('gray')) {
      $(this).addClass("blue").removeClass("gray");
    } else {
      $(this).addClass("gray").removeClass("blue");
    }

    var this_row = $(this).closest('tr').attr('row-id');
    var this_lang = $(this).attr('data-lang');

    if ($(this).hasClass('blue')) {
      selec.push(this_lang);
    } else {
      var index = selec.indexOf(this_lang);
      selec.splice(index, 1);
    }
    $('#to_save_' + this_row).val(selec);
    return false;
  });

});
.tb table tr td {
  border: 1px solid #ccc;
}
.minitag:hover {
  background-color: #fff !important;
  color: #ccc !important;
  border: 1px solid #EE725C !important;
  text-shadow: 0 1px #A32D16 !important;
  cursor: pointer;
  opacity: 0.7;
}
.minitag {
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  font-size: 10px;
  background-color: #FFB600;
  border: 1px solid #b62435;
  text-shadow: 0 1px #ccc;
  color: #000;
  font-weight: 500;
  margin: 0 2px 2px 0;
  display: inline-block;
  padding: 0 2px;
  cursor: default;
}
.minitag.blue {
  background-color: #4CABDA !important;
  border: 1px solid #296888 !important;
  text-shadow: 0 1px #296888 !important;
  color: #ffffff !important;
}
.selected {
  background-color: #EE725C !important;
  color: #fff;
  border: 1px solid #EE725C !important;
  text-shadow: 0 1px #A32D16 !important;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<table class="tb" id="list">
  <tr row-id="501">
    <td>je suis tré bon</td>
    <td>
      <li class="minitag gray" data-lang="none">
        None</li>
      <li class="minitag gray" data-lang="en">
        English</li>
      <li class="minitag gray" data-lang="ja">
        Japanese</li>
      <li class="minitag gray" data-lang="ko">
        Korean</li>
      <li class="minitag gray" data-lang="it">
        Italian</li>
      <li class="minitag gray" data-lang="zh">
        Chinese</li>
      <li class="minitag gray" data-lang="es">
        Spanish</li>
      <li class="minitag gray" data-lang="fr">
        French</li>
      <li class="minitag gray" data-lang="th">
        Thai</li>
      <li class="minitag gray" data-lang="de">
        German</li>
      <li class="minitag gray" data-lang="pt">
        Portuguese</li>
      <li class="minitag gray" data-lang="ro">
        Romanian</li>
      <li class="minitag gray" data-lang="ru">
        Russian</li>
      <li class="minitag gray" data-lang="ar">
        Arabic</li>
      <input value="" id="to_save_501" name="to_save" style="border: 1px solid #000" type="text">
    </td>
    <td>Save Row</td>
  </tr>
  <tr row-id="503">
    <td>yo soy muy bello</td>
    <td>
      <li class="minitag gray" data-lang="none">
        None</li>
      <li class="minitag gray" data-lang="en">
        English</li>
      <li class="minitag gray" data-lang="ja">
        Japanese</li>
      <li class="minitag gray" data-lang="ko">
        Korean</li>
      <li class="minitag gray" data-lang="it">
        Italian</li>
      <li class="minitag gray" data-lang="zh">
        Chinese</li>
      <li class="minitag gray" data-lang="es">
        Spanish</li>
      <li class="minitag gray" data-lang="fr">
        French</li>
      <li class="minitag gray" data-lang="th">
        Thai</li>
      <li class="minitag gray" data-lang="de">
        German</li>
      <li class="minitag gray" data-lang="pt">
        Portuguese</li>
      <li class="minitag gray" data-lang="ro">
        Romanian</li>
      <li class="minitag gray" data-lang="ru">
        Russian</li>
      <li class="minitag gray" data-lang="ar">
        Arabic</li>
      <input value="" id="to_save_503" name="to_save" style="border: 1px solid #000" type="text">
    </td>
    <td>Save Row</td>
  </tr>
  <tr row-id="506">
    <td>I am a lumberjack</td>
    <td>
      <li class="minitag gray" data-lang="none">
        None</li>
      <li class="minitag gray" data-lang="en">
        English</li>
      <li class="minitag gray" data-lang="ja">
        Japanese</li>
      <li class="minitag gray" data-lang="ko">
        Korean</li>
      <li class="minitag gray" data-lang="it">
        Italian</li>
      <li class="minitag gray" data-lang="zh">
        Chinese</li>
      <li class="minitag gray" data-lang="es">
        Spanish</li>
      <li class="minitag gray" data-lang="fr">
        French</li>
      <li class="minitag gray" data-lang="th">
        Thai</li>
      <li class="minitag gray" data-lang="de">
        German</li>
      <li class="minitag gray" data-lang="pt">
        Portuguese</li>
      <li class="minitag gray" data-lang="ro">
        Romanian</li>
      <li class="minitag gray" data-lang="ru">
        Russian</li>
      <li class="minitag gray" data-lang="ar">
        Arabic</li>
      <input value="" id="to_save_506" name="to_save" style="border: 1px solid #000" type="text">
    </td>
    <td>Save Row</td>
  </tr>
</table>

https://jsfiddle.net/53henkL8/10/

有什么建议吗?

最佳答案

您有全局选择,它包含所有值,这里是为每一行保留不同数组的对象。

$(function() {
  var selec = {};
  $('#list li').click(function() {
    if ($(this).hasClass('gray')) {
      $(this).addClass("blue").removeClass("gray");
    } else {
      $(this).addClass("gray").removeClass("blue");
    }

    var this_row = $(this).closest('tr').attr('row-id');
    var this_lang = $(this).attr('data-lang');
    if(!selec[this_row]) selec[this_row] = [];

    if ($(this).hasClass('blue')) {
      selec[this_row].push(this_lang);
    } else {
      var index = selec[this_row].indexOf(this_lang);
      selec[this_row].splice(index, 1);
    }
    $('#to_save_' + this_row).val(selec[this_row]);

    return false;
  });  
});

http://jsfiddle.net/cc71cwqe/1/

关于javascript - 选择items ids到同一行input单独保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716009/

相关文章:

javascript - 如何使用 Node 写入文件

javascript - 在外部辅助函数中使用 Chosen Selectors 时出现的问题

javascript - React 内联样式 - 用居中文本替换 tbody

javascript - 有没有办法在 Angularjs 的指令中获取子元素的宽度和高度

CSS:如何将 div 2 x 2 定位

javascript - 理解 promise 链接 : 'then()' get's undefined parameter as the result

javascript - 跨域发送sessionToken

javascript - 打字动画

javascript - 从一个页面平滑滚动到另一页面的特定部分

javascript - 如何从html文件中的li标签调用get属性