我刚刚使用ajax在多个复选框上完成了小项目。但现在我想使用提交按钮进行过滤选项。因此,现在选择了多个复选框并点击了sumbit按钮后,只有它应该在手机数据库中更改。有帮助吗?谢谢。 这是我的代码: 的index.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>
Submit.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);
?>
答案 0 :(得分:0)
首先,删除此侦听器:
$checkboxes.on("change", function(){
var opts = getPhoneFilterOptions();
updatePhones(opts);
});
您不希望在检查复选框时更改表格中的数据,但只有在单击提交按钮后才能更改。我没有看到任何&#34;提交&#34; &#34;应用&#34;以外的按钮这似乎与补贴选项有关,而不是过滤,所以添加一个&#39;提交&#39;第一个(实际上只是一个按钮):
(...)
<div>
<input type="checkbox" id="Nokia">
<label for="Nokia">Nokia</label>
</div>
<button id="submitFilter">Filter</button>
(...)
然后将你在复选框监听器中的内容丢给onClick of submitFilter。
$("#submitFilter").on("click", function(){
var opts = getPhoneFilterOptions();
updatePhones(opts);
});
我更新了小提琴,以便更准确地满足您的需求。 Check it here
编辑:
要打开新标签页:
var win = window.open(url, '_blank');
win.focus();
其中网址显然是您要打开的网址。您也可以将其设置为表单目标并将要传递的数据放入表单中,并将过滤器设置为提交。