【问题标题】:Why is the select display showing the value instead of the label?为什么选择显示显示的是值而不是标签?
【发布时间】:2015-01-09 21:03:27
【问题描述】:

我正在尝试使用带有内联编辑的选择。我已经使用弹出窗口进行编辑以正确显示它,但我希望它全部内联并提交模糊。我的数据包括每个下拉项的 ID 和名称,我在一个看起来像 { label: "blah", value: "blah" } 等的对象中拥有它们。

但是,在 DataTable 中,下拉菜单都以 ID 而不是标签作为默认值显示。我不希望用户看到 id。我尝试将编辑器字段名称设置为标签,将 DataTable 列设置为值,这似乎适用于弹出窗口,但对于内联编辑,我收到错误“未捕获无法从源自动确定字段。请指定字段名称”。

我的初始化如下所示:

editor = new $.fn.dataTable.Editor({
      ajax: 'url',
      table: '#table',
      idSrc: 'id',
      fields: [{
          label: "Location",
          name: "location_name", //this is where the problem is, I think
          type: "select",
          ipOpts: locationList
      }]})

 $('#table').dataTable({
      dom: "Tfrtip",
      "searching": false,
      "ajax": {
          "url": "url",
          "type": "GET"
      },
      "columnDefs": [
        { "visible": false, "targets": [8] }
      ],
      "columns": [
          { "data": "location_id" }
      ])}

如果我把DataTable改成使用名字,显示是正确的,但是我得到的是提交到数据库的名字而不是ID,我需要ID。

我该怎么办?

【问题讨论】:

    标签: javascript datatables jquery-datatables jquery-datatables-editor


    【解决方案1】:

    我是这样做的,虽然很乱但是很管用:

    每个可编辑对象都有自己的跨度类。与父对象相关的 ID。与正在更新的对象相关的键。当然还有数据。

    <td><span class="dcmeta" data-value="'.$row['DATACENTER'].'" data-type="select" id="'.$row['CLUSTERNAME'].'" key="DATACENTER">'.$row['DATACENTER'].'</span></td>
    <td><span class="tiermeta" data-value="'.$row['TIER'].'" data-type="select" id="'.$row['CLUSTERNAME'].'" key="TIER">'.$row['TIER'].'</span></td>
    

    Javascript:

    <script type="text/javascript">
        jQuery(document).ready(function() {  
        $.fn.editable.defaults.mode = 'popup';
        $('.xedit').editable(); 
        $('.tiermeta').editable({
        title: 'Test title',
        source: [
              {value: 'Tier 1', text: 'Tier 1'},
              {value: 'Tier 2', text: 'Tier 2'},          
           ]
        }); 
        $('.dcmeta').editable({
        title: 'Test title',
        source: [
              {value: 'DC1', text: 'DC1'},
              {value: 'DC2', text: 'DC2'},           
           ]
        });     
        $(document).on('click','.editable-submit',function(){
        var key = $(this).closest('.editable-container').prev().attr('key');
        var x = $(this).closest('.editable-container').prev().attr('id');
        var y = $('.input-metadata').val();
        var z = $(this).closest('.editable-container').prev().text(y);
            $.ajax({
                url: "process.php?id="+x+"&data="+y+"&key="+key,
    
                type: 'GET',
                success: function(s){
                    if(s == 'status'){
                    $(z).html(y);}
                    if(s == 'error') {
                    alert('Error Processing your Request! ');}
                },
                error: function(e){
                    alert('Error Processing your Request!! ');
                }
            });
        });
    });
    </script>
    

    PHP:

    <?php
    $conn = sqlsrv_connect( $serverName, $connectionInfo );
    if( $conn === false ) {
        die( print_r( sqlsrv_errors(), true));
    }
    if($_GET['id'] and $_GET['data'] and $_GET['key'])
    {
    $id = $_GET['id'];
    $data = $_GET['data'];
    $key = $_GET['key'];
    $sql = "update CLUSTER set $key='$data' where CLUSTERNAME='$id'";
    
    echo 'success';
    $stmt = sqlsrv_query( $conn, $sql );
        if( $stmt === false) {
            die( print_r( sqlsrv_errors(), true) );
    }
    }
    ?>
    

    【讨论】:

    • 感谢您的回答!你能解释一下你在这里做什么吗?我有点困惑,因为您的下拉菜单似乎没有特定的 ID(值和文本相同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2011-11-21
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多