代码之家  ›  专栏  ›  技术社区  ›  newuser

如何禁用其他下拉菜单,直到选择第一个下拉菜单?

  •  0
  • newuser  · 技术社区  · 2 年前

    我的项目要求用户在选择任何其他下拉菜单之前先选择“名称”。要做到这一点,如何禁用其他列,直到选择“名称”列?请参阅下面的小提琴和代码。

    这是我正在编写的代码。我还包含了我小提琴的链接。谢谢 https://jsfiddle.net/mL9f58wg/

    $(document).ready(function() {
    $('#table-wrap').hide();
    var table = $('#example').DataTable({
    
    responsive: true,
    mark: true,
    stateSave: false,
    searching: true
    });
    
    buildSelect(table);
    $('#table-filter').on('change', function () {
    // show the tbody when the user clicks on a filter option
    $('#table-wrap').show();
    table.columns.adjust();
    
    table.search(this.value).draw();
    });
    
    
    table.on('draw', function() {
    buildSelect(table);
    });
    $('#test').on('click', function() {
    table.search('').columns().search('').draw();
    $('#table-wrap').hide();
    });
    });
    
    function buildSelect(table) {
    var counter = 0;
    table.columns([0, 1, 2]).every(function() {
    var column = table.column(this, {
    search: 'applied'
    });
    counter++;
    var select = $('<select id="dd' + counter + '"><option value="">Select</option></select>')
    .appendTo($('#dropdown' + counter).empty())
    .on('change', function() {
    var val = $.fn.dataTable.util.escapeRegex(
    $(this).val()
    );
    
    column
    .search(val ? '^' + val + '$' : '', true, false)
    .draw();
    });
    
    column.data().unique().sort().each(function(d, j) {
    select.append('<option value="' + d + '">' + d + '</option>');
    
    });
    
    // The rebuild will clear the exisiting select, so it needs to be repopulated
    var currSearch = column.search();
    if (currSearch) {
    // Use RegEx to find the selected value from the unique values of the column.
    // This will use the Regular Expression returned from column.search to find the first matching item in column.data().unique
    select.val(column.data().unique().toArray().find((e) => e.match(new RegExp(currSearch))));
    }
    });
    }
    <!DOCTYPE html>
    <html>
    <head>
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    
    <link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
    <script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
    
    <meta charset=utf-8 />
    <title>DataTables - JS Bin</title>
    </head>
    <div class="searchbox" select id="table-filter">
    <p><label for="dd1">Name:</label> <span id="dropdown1" input type="checkbox">
    </span>
    </p>
    
    <p><label for="dd2">Postion:</label> <span id="dropdown2">
    </span>
    </p>
    
    <p><label for="dd3">Office:</label> <span id="dropdown3">
    </span>
    </p>
    <button type="button" id="test">Clear Filters</button>
    </div>
    <div id="table-wrap">
    <table id="example" class="cell-border row-border stripe dataTable no-footer dtr-inline" role="grid" style=" width: 100%; padding-top: 10px;"><thead>
    <tr>
    
    <th>&#160;</th>
    <th>&#160;</th>
    <th>&#160;</th>
    <th colspan="3" style=" text-align: center;">Information</th>
    </tr>
    
    
    <tr>
    <th>Name</th>
    <th>Position</th>
    <th>Office</th>
    <th>Age</th>
    <th>Start date</th>
    <th>Salary</th>
    </tr>
    </thead>
    
    
    <tbody>
    <tr>
    <td>ID.AI</td>
    <td>System Architect</td>
    <td>Edinburgh</td>
    <td>61</td>
    <td>2011/04/25</td>
    <td>$3,120</td>
    </tr>
    <tr>
    <td>Garrett -2</td>
    <td>Director</td>
    <td>Edinburgh</td>
    <td>63</td>
    <td>2011/07/25</td>
    <td>$5,300</td>
    </tr>
    <tr>
    <td>Ashton.1 -2</td>
    <td>Technical Author</td>
    <td>San Francisco</td>
    <td>66</td>
    <td>2009/01/12</td>
    <td>$4,800</td>
    </tr>
    
    
    </tr></tbody></table>
    </div>
    0 回复  |  直到 2 年前
        1
  •  1
  •   aabdulahad    2 年前

    将字段设置为在文档加载时隐藏,然后将事件侦听器附加到第一个框,并检查用户选择的值,如果是实际名称,则显示其他两个框,如果不是隐藏它们

    // Place this whole code block in $(document).ready()
    
    $("span#dropdown2").hide()
    $("span#dropdown3").hide()
      
    $('span#dropdown1').on('change', function(event) {
      const check = !!event.target.value
      if (check) {
        $("span#dropdown2").show()
        $("span#dropdown3").show()
      } else {
        $("span#dropdown2").hide()
        $("span#dropdown3").hide()
      }
    });