我有一个使用iCheck设置的复选框。这部分工作正常。我的问题是我希望在每次更改时保存数据库中的复选框状态。但我的ajax请求只是第一次启动。
我有这样的设置:
HTML:
<ul class='tasks'>
<li><input type=checkbox rel='module' data='1' name=done[] class='taskStatus'>Text</li>
</ul>
的jQuery
$("input[type=checkbox]").on("ifClicked", function(){
alert("init");
var stateObj = {
id: $(this).attr("data"),
mode: $(this).attr("rel"),
state: null
};
if($(this).prop("checked") === false){
stateObj.state = 1;
} else {
stateObj.state = 0;
}
updateState(stateObj);
});
function updateState(stateObj){
alert("updating");
$.ajax({
url: "moduleAjax.php?module=" + stateObj.mode + "&page=eventState",
type: "POST",
data: "obj=" + JSON.stringify(stateObj),
success: function(data){
alert(data);
},
error: function(a, b, c){
alert("error");
}
});
}
我试图注释掉ajax请求。这样做警报框正在按照他们应该的方式触发。
我有一个解决方法,添加window.location.reload();警告后(数据)。但在我看来,这不应该是必要的。我也试过在async中发送请求:false;模式没有成功。我没有想法。
问题
为什么没有在每次点击时触发ifClicked事件,只有第一次在发送ajax请求时触发?
其他信息
执行脚本时,控制台中没有错误。第二次运行都没有任何警报。
我甚至无法在jsfiddle中重现这个问题。
任何有线索的人?
修改
我刚刚测试了新的iCheck beta源代码。然后事件就会被解雇,但还有其他一些问题。所以这似乎是源于我iCheck的一个错误。 (但我可能是错的)。
答案 0 :(得分:0)
在Ajax响应之后重新初始化事件处理程序怎么样?
$(function () {
initClickedHandler();
});
function initClickedHandler(){
$("input[type=checkbox]").on("ifClicked", function(){
alert("init");
var stateObj = {
id: $(this).attr("data"),
mode: $(this).attr("rel"),
state: null
}
if($(this).prop("checked") === false){
stateObj.state = 1;
}
else{
stateObj.state = 0;
}
updateState(stateObj)
});
}
function updateState(stateObj){
alert("updating");
$.ajax({
url: "moduleAjax.php?module=" + stateObj.mode + "&page=eventState",
type: "POST",
data: "obj=" + JSON.stringify(stateObj),
success: function(data){
alert(data);
initClickedHandler();
},
error: function(a, b, c){
alert("error");
}
});
}
此外,您在updateState(stateObj)
之后缺少分号答案 1 :(得分:0)
您可以使用jQuery的.click()
方法(jsfiddle)完全避免此问题:
$('input[type="checkbox"]').on('click', function() {
var stateObj = {
id: $(this).attr("data"),
mode: $(this).attr("rel"),
state: null
}
if( $(this).prop('checked') === false ) {
stateObj.state = 1;
} else {
stateObj.state = 0;
}
updateState(stateObj);
});
function updateState(stateObj) {
console.log(stateObj.state);
}