如何从表格数据中导入下拉值

Posted

技术标签:

【中文标题】如何从表格数据中导入下拉值【英文标题】:How to import dropdown value from table data 【发布时间】:2015-12-07 00:03:29 【问题描述】:

我有一个 java / Spring MVC 应用程序,其中包括与表交互的表单。在其中一个页面上,我对其进行了设计,以便在单击表格上的一行时,使用该行中的数据填充表单数据。

Javascript 代码:

$('#table tbody').on('click', 'tr', function () 
    var idx = table.row(this).index();
    var vName = document.getElementById("userName");
    vName.value = table.cell(idx, 7).data();

这适用于文本表单字段。我遇到问题的地方是 "userName" 字段,因为那是一个列表 (form:select) 字段。

我不太确定如何让我的应用能够根据从表中读取的文本数据在下拉列表中找到名称的列表索引。

这是下拉字段的 html:

<spring:bind path="model.userName">
    <label for="fullName">Select User:</label>
    <form:select cssClass="form-control" path="model.userName" id="userName" name="userName">
        <form:option value=""></form:option>
        <form:options items="$userList" itemLabel="fullName" itemValue="ID"/>
    </form:select>
</spring:bind>

下拉列表 $userList 是通过在我的 DAO 中构建一个 List 以及以下 RowMapper 方法来创建的:

private static class UserRowMapper implements RowMapper 
    public Object mapRow(ResultSet rs, int i) throws SQLException 
        return new Users(rs.getLong("ID"),
        rs.getString("LNAME") + ", " + rs.getString("FNAME"));
    

【问题讨论】:

【参考方案1】:

当您设置select 元素的value 时,实际上您将带有此valueoption 设置为selected,而在这里您使用的是名称,因此您正在处理option 的强>内容和不是它的价值

因此,在您的示例中,当您从表中选择 userName 时,您只需循环选择选项并将适当的 option 设置为 selected

这是您需要的代码:

$('#table tbody').on('click', 'tr', function() 
  var idx = table.row(this).index();
  var vName = document.getElementById("userName");

  for (i in vName.options) 
    //I test on the innerText here because FF doesn't support it
    var optionText = typeof vName.options[i].innerText !== 'undefined' ? vName.options[i].innerText : vName.options[i].textContent;
    if (optionText === table.cell(idx, 7).data()) 
      vName.selectedIndex = i;
      break;
    
  
);

这是一个简短的片段示例:

$('#name').on('change', function() 
  var vName = document.getElementById("userName");
  
  for (i in vName.options) 
    var optionText = typeof vName.options[i].innerText !== 'undefined' ? vName.options[i].innerText : vName.options[i].textContent;
    
    if (optionText === $(this).val()) 
      vName.selectedIndex = i;
      break;
    
  
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Enter name:
<input type="text" id="name" />
<select name="userName" id="userName">
  <option value="">Muhammad</option>
  <option value="">Alain</option>
  <option value="">John</option>
  <option value="">Ali</option>
  <option value="">Maria</option>
  <option value="">Lee</option>
  <option value="">Alessandro</option>
</select>

【讨论】:

太好了,很高兴它有帮助。【参考方案2】:

通常,将数据从服务器获取到前端的最佳方式是作为 JSON 字符串/对象,然后我们可以轻松地操作它,就像您已经在做的那样。

我认为你几乎在那里,你只是缺少一个部分。

在下面的示例中,我在表格和菜单中列出相同的用户,单击表格行时,下拉列表中的选定用户是默认的。

以这个示例表数据为例。

JS:

var users = [
  ID: 0,
  LNAME: "First",
  FNAME: "Senior"
, 
  ID: 1,
  LNAME: "Second",
  FNAME: "Sir"
, 
  ID: 2,
  LNAME: "Third",
  FNAME: "Chap"
, 
  ID: 3,
  LNAME: "Fourth",
  FNAME: "Mr"
];


mag.module('userName', 
  view: function(state) 

    state.tr = state.option = users.map(function(user) 
      return 
        _selected: user.ID == state.index ? true : null,
        _text: user.FNAME + ' ' + user.LNAME,
        _value: user.ID
      
    );

    state.$tr = 
      _onclick: function(e, i) 
       state.index = i;
       state.span = users[i].FNAME + users[i].LNAME
      
    
  
);

html

<div id="userName">
  <table>
    <tr></tr>
  </table>
  <hr/>
  <label for="fullName">Select User: <span></span></label>
  <select class="form-control" name="userName">
    <option></option>
  </select>
</div>

这是完整的工作示例:http://jsbin.com/bokiqebezo/1/edit?html,js,output

希望这会有所帮助!

【讨论】:

以上是关于如何从表格数据中导入下拉值的主要内容,如果未能解决你的问题,请参考以下文章

如果工作表包含下拉列表,则在访问中导入 Excel 数据时出现问题

vba如何新建一个excel并且从另一个excel中导入数据到这个新建的excel中?

在Excel中如何插入地图

如果列为空,我如何从 Mysql 的另一个表中导入一些列?

如何使用 Blazor 框架在前端浏览器中导入和导出 Excel

从excel中导入数据到word表格