由jquery mobile创建的表中的单选按钮

时间:2017-10-13 07:27:19

标签: javascript jquery html jquery-mobile

我尝试用jquery mobile从数据库填充带有单选按钮的表。 当我直接在HTML中创建表时,该表是可以的,但是通过jscript创建相同的表,结果完全不同。 在这个例子中,每个表只有一行,但我的目的是从数据库创建表行。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>

<head>
  <title>Page Title</title>

  <meta name="viewport" content="width=device-width, initial-scale=1" , charset="utf-8">
  <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
  <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
  <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
  <script>
    $(document).on("pageshow", "#page1", function() {
      // Create table 
      var retServiceName = 'James Smith by jquery';

      var service_table = $('<table data-role="table"  data-mode="columntoggle" class="ui-responsive table-stroke" id="service" data-column-btn-text="Columns..."></table>');

      var service_tr_th = $("<thead><tr><th data-priority='1'>Name</th><th data-priority='2'>Vote</th></tr></thead>");
      var service_tbody = $('<tbody></tbody>');
      var service_tr = $('<tr></tr>');
      var servicefieldset = '<fieldset> data-role="controlgroup" data-type="horizontal" data-mini="false"';
      var serviceradio0 = '<input type="radio" name="radio-choice-b1" id="radio-choice-c1" value="0"><label for="radio-choice-c1">Yes</label>';
      var serviceradio1 = '<input type="radio" name="radio-choice-b1" id="radio-choice-d1" value="1"><label for="radio-choice-d1">No</label>';
      var serviceradio2 = '<input type="radio" name="radio-choice-b1" id="radio-choice-e1" value="2"><label for="radio-choice-e1">Null</label>';

      var service_name_td = $('<td>' + retServiceName + '</td>');
      var service_name_td2 = $('<td>' + servicefieldset + serviceradio0 + serviceradio1 + serviceradio2 + '</fieldset></td>');
      service_name_td.appendTo(service_tr);
      service_name_td2.appendTo(service_tr);
      service_tr_th.appendTo(service_table);
      service_tr.appendTo(service_tbody);
      service_tbody.appendTo(service_table);
      service_table.appendTo($("#categories"));

      service_table.table();

    });
  </script>
  <div data-role="page" id="page1">
    <div data-role="header" data-theme="b">
      <h1>Voting</h1>
    </div>
    <div role="main" class="ui-content">

      <table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke" id="service" data-column-btn-text="Columns...">
        <thead>
          <tr>
            <th data-priority='1'>Name</th>
            <th data-priority='2'>Vote</th>
          </tr>
        </thead>
        <td>James Smith by HTML</td>
        <td>
          <fieldset data-role="controlgroup" data-type="horizontal" data-mini="false">
            <input type="radio" name="radio-choice-b2" id="radio-choice-c2" value="0">
            <label for="radio-choice-c2">Yes</label>
            <input type="radio" name="radio-choice-b2" id="radio-choice-d2" value="1">
            <label for="radio-choice-d2">No</label>
            <input type="radio" name="radio-choice-b2" id="radio-choice-e2" value="2">
            <label for="radio-choice-e2">Null</label>
          </fieldset>
        </td>
      </table>
      <div id="categories"></div>
    </div>
  </div>

1 个答案:

答案 0 :(得分:0)

您可以通过复制和粘贴一些在线工具(例如Plunker或Fiddle)轻松查明HTML中是否存在某些问题:

enter image description here

如果从数据库数据中编写HTML,首先要注意的是保留HTML元素的唯一标识符。剩下的只是耐心和毅力。恕我直言,实现这种无聊任务的最简单方法是将字符串组成HTML,您可以随时在在线工具中查看(&#34; Tidy&#34;)。

最后,您可以在一次拍摄中插入和增强整个HTML。对于新插入的内容,容器上的JQM .enhanceWithin()就足够了,这里不需要所有append内容。

&#13;
&#13;
$(document).on("pageshow", "#page1", function() {
  var html = "";
  $("#categories").html(html); // clean-up

  // start the tables loop 
  var sectionId = "service-1"; // compose unique id's
  html += '<table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke" id="' + sectionId + '" data-column-btn-text="Columns...">';
  html += '<thead><tr><th data-priority="1">Name</th><th data-priority="2">Vote</th></tr></thead>';
  html += '<tbody>';

  // start the rows loop
  html += '<tr>';
  var retServiceName = 'James Smith by jquery';
  html += '<td>' + retServiceName + '</td>';
  html += '<td>';
  html += '<fieldset data-role="controlgroup" data-type="horizontal" data-mini="false">';
  var rowId = "radio-choice-b1"; // compose unique id's

  // start the choices loop, compose unique id's
  var choiceVal = "0";
  var choiceId = rowId + "-" + choiceVal;
  var choiceLabel = "Yes";
  html += '<input type="radio" name="' + rowId + '" id="' + choiceId + '" value="' + choiceVal + '"><label for="' + choiceId + '">' + choiceLabel + '</label>';

  var choiceVal = "1";
  var choiceLabel = "No";
  var choiceId = rowId + "-" + choiceVal;
  html += '<input type="radio" name="' + rowId + '" id="' + choiceId + '" value="' + choiceVal + '"><label for="' + choiceId + '">' + choiceLabel + '</label>';

  var choiceVal = "2";
  var choiceLabel = "Null";
  var choiceId = rowId + "-" + choiceVal;
  html += '<input type="radio" name="' + rowId + '" id="' + choiceId + '" value="' + choiceVal + '"><label for="' + choiceId + '">' + choiceLabel + '</label>';

  html += '</fieldset>';
  html += '</td>';
  html += '</tr>';

  html += '</tbody>';
  html += '</table>';
  console.log(html); // check the whole html

  $("#categories").html(html);
  $("#categories").enhanceWithin();

});
&#13;
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>Login</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.css">
  <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
  <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>

<body>
  <div data-role="page" id="page1" data-theme="a">
    <div data-role="header" data-theme="b">
      <h1>Voting</h1>
    </div>
    <div role="main" class="ui-content">
      <table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke" id="service" data-column-btn-text="Columns...">
        <thead>
          <tr>
            <th data-priority='1'>Name</th>
            <th data-priority='2'>Vote</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>James Smith by HTML</td>
            <td>
              <fieldset data-role="controlgroup" data-type="horizontal" data-mini="false">
                <input type="radio" name="radio-choice-b2" id="radio-choice-c2" value="0">
                <label for="radio-choice-c2">Yes</label>
                <input type="radio" name="radio-choice-b2" id="radio-choice-d2" value="1">
                <label for="radio-choice-d2">No</label>
                <input type="radio" name="radio-choice-b2" id="radio-choice-e2" value="2">
                <label for="radio-choice-e2">Null</label>
              </fieldset>
            </td>
          </tr>
        </tbody>
      </table>
      <div id="categories"></div>
    </div>
  </div>
</body>

</html>
&#13;
&#13;
&#13;