【问题标题】:Select multiple checkboxes and update the database using submit button选择多个复选框并使用提交按钮更新数据库
【发布时间】:2014-07-14 23:10:57
【问题描述】:

我刚刚使用 ajax 完成了多个复选框的小项目。但现在我想使用提交按钮进行过滤选项。因此,现在在选择多个复选框并单击 sumbit 按钮后,只有它应该在电话数据库中更改。有什么帮助吗?谢谢。 这是我的代码: 索引.php

<script>


 function makeTable(data){
    var tbl_body = "";
    $.each(data, function() {
      var tbl_row = "",
          currRecord = this;

      $.each(this, function(k , v) {
        if(k==='model'){
          v = "<a href='content.php?id=" + currRecord['id'] +"'>" + v + "</a>";
        } else if (k==='price'){
          v = "<span class='price'>" + v + "</span>";
        }
        tbl_row += "<td>"+v+"</td>";
      })
      tbl_body += "<tr>"+tbl_row+"</tr>";
    })

    return tbl_body;
  }

  function getPhoneFilterOptions(){
    var opts = [];
    $checkboxes.each(function(){
      if(this.checked){
        opts.push(this.id);
      }
    });

    return opts;
  }


  function updatePhones(opts){
    if(!opts || !opts.length){
      opts = allBrands;
    }

    $.ajax({
      type: "POST",
      url: "submit.php",
      dataType : 'json',
      cache: false,
      data: {filterOpts: opts},
      success: function(records){
        $('#phones tbody').html(makeTable(records));
        updatePrices();
      }
    });
  }

  function subsidyIsValid(){
    var amount1 = $("#amount1").val(),
        amount2 = $("#amount2").val(),
        regex = /^\d+$/,
        inputValid = false;

    if(regex.test(amount1) && regex.test(amount2)){
      var newTotal = Number(amount1) + Number(amount2)
      $("#total").text(newTotal);
      inputValid = true;
    }

    return inputValid
  }

  function updatePrices(){
    var subsidyTotal = Number($("#total").text());

    $(".price").each(function(){
      var origVal = Number($(this).text())
      $(this).text(origVal - subsidyTotal)
    })
  }

 $("#submitFilter").on("click", function(){
    var opts = getPhoneFilterOptions();
    updatePhones(opts);
        })

  $("#apply").on("click", function(){
    if(subsidyIsValid()){
      $(this).prop("disabled", true);
      $(this).next().prop("disabled", false);
      updatePrices();
    } else {
      alert("Subsidy invalid!")
    }
  });

  $("#remove").on("click", function(){
    $("#amount1").val("");
    $("#amount2").val("");
    $("#total").text("0");
    $(this).prop("disabled", true);
    $(this).prev().prop("disabled", false);

    $checkboxes.trigger("change");
  });

  var allBrands = [];
  $("input[type=checkbox]").each(function(){
    allBrands.push($(this)[0].id)
  })

  updatePhones();
  updatePrices();
</script> 

提交.php

<?php 
require 'Database.php';
#### TEMP SET NAMES FÜR UTF8 ###################################################
include 'Json.php';
  $opts = $_POST['filterOpts'];
  $tmp = array();
  foreach ($opts as $opt) {
        $tmp[] = '"'.$opt.'"';
  }
         $query = 
      'SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN ('.implode(",", $tmp).')';


  $result = mysql_query($query);
  $data   = array();
  while ($row = mysql_fetch_assoc($result)) {
  $data[] = $row;
  }

echo json_encode($data);
?>

【问题讨论】:

  • 所以它应该只在点击提交后过滤结果?
  • 是的,只有在提交后它才应该更新数据库。我已经创建了提交按钮并尝试在 onclick 上调用函数 updatePhones(opts) 但它不起作用..

标签: javascript php ajax checkbox


【解决方案1】:

首先,移除这个监听器:

$checkboxes.on("change", function(){
    var opts = getPhoneFilterOptions();
    updatePhones(opts);
  });

您不想在选中复选框时更改表中的数据,但只能在单击提交按钮后更改。除了“应用”之外,我没有看到任何“提交”按钮,这似乎与抑制选项有关而不是与过滤有关,所以首先添加一个“提交”(实际上只是一个按钮):

(...)
<div>
  <input type="checkbox" id="Nokia">
  <label for="Nokia">Nokia</label>
</div>
<button id="submitFilter">Filter</button>
(...)

然后将复选框监听器中的内容扔到 submitFilter 的 onClick 中。

 $("#submitFilter").on("click", function(){
     var opts = getPhoneFilterOptions();
     updatePhones(opts);
 });

我更新了小提琴,使其更准确地满足您的需求。 Check it here

编辑:

要打开一个新标签:

var win = window.open(url, '_blank');
win.focus();

其中 url 显然是您要打开的 url。您也可以将其设置为表单目标,并将您要传递的数据放入表单中,然后过滤提交。

【讨论】:

  • 我尝试做同样的事情,但它仍然无法正常工作。它没有过滤过滤器按钮上的数据。
  • 您好,我已经进行了更改,请根据您的要求检查 index.php 中的更改,但仍然无法正常工作:(
  • 检查更新的小提琴。除了 ajax 通信之外,它可以完成大部分您想做的事情。
  • 嗨,我已经看到了更新的小提琴,但我没有发现以前的代码有任何变化。你能告诉我你在哪里做了改变吗?小提琴正在工作,但我不知道为什么它不能从我的代码中工作
  • 它正在获取所选复选框的 ID,并在提交时将它们插入表中。以前的提交已硬编码插入。只需使用我的,而不是像以前一样通过并打印 ajax 结果,而不是获取复选框的 ID。如果它不起作用,请检查浏览器的 CONSOLE,它会显示错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多