我遇到了jQuery点击功能的问题。当用户点击一个HTML按钮时,我的jQuery根据存储在数据库中的相应开/关状态动态地加载一些样式化的复选框/切换开关。Javascript动态切换加倍Ajax调用
然后,我为每个动态加载的切换开关添加了一个点击函数,以便当用户点击它时,它用新状态更新数据库,然后用Ajax调用GetAllSwitches函数再次加载当前状态从数据库切换回resultScreen。
它的工作原理是正确更新数据库中的状态,但程序会记住以前的“点击”,并在每次用户单击时再次运行它们,随后出现新的点击状态。所以在第一次点击时,会发出1个http请求,第2个,第3个,第4个,第4个8位等。问题出在点击几下后,ajax调用变得很大。
我不是那种Javascript经验丰富,所以我知道我的代码是冗长的,我明显错过了一些东西,但有没有修复或更好的方法呢?
总之我想要实现的是:
- 用户点击allSwitches
- Ajax调用返回的所有对象与屏幕上的一个拨动开关
- 有拨动式开关的点击哪些更新数据库具有新状态的数据库
- 允许按用户喜欢的次数多次单击开关,仅对DB进行一次更新
HTML
<fieldset>
<legend> Get All Lights Dynamically</legend>
<input type="button" value="Show All" id="allSwitches"/>
</fieldset>
<fieldset>
<div id='resultScreen'></div>
</fieldset>
的JavaScript
$(document).ready(function(){
$("#allSwitches").click(function(){
$.ajax({
url: 'GetAll',
type: 'GET',
dataType: 'text',
success: function(data) {
getAllSwitches(data)
});
});
});
function getAllSwitches(data){
var tr;
myData = $.parseJSON(data);
for(var i = 0; i < myData.length; i++){
tr = $('<tr/>');
if(myData[i].state=="On"){
tr.append('<div id="togs' + i + '">' + '<label class="switch">' +
'<input type="checkbox" class="' + myData[i].lightName +'" checked>' +
'<div class="slider round"></div>'
+'</label>' + '</div>');
tr.append("<td>" + myData[i].lightName +
" is " + myData[i].state + "</td>");
$('#resultScreen').append(tr);
var className = '.' + myData[i]lightName;
var lightName = myData[i].lightName;
var state = "Off";
upTog(className, lightName, state);
} else if (myData[i].state=="Off"){
tr.append('<label class="switch">' +
'<input type="checkbox" class="' + myData[i].lightName +'" >' +
'<div class="slider round"></div>'
+'</label>');
tr.append("<td>" + myData[i].lightName +
" is " + myData[i].state + "</td>");
$('#resultScreen').append(tr);
var className = '.' + myData[i].lightName;
var lightName = myData[i].lightName;
var state = "On";
upTog(className, lightName, state);
}
}
}
function upTog(className, lightName, state){
$(document).on('click', className, function() {
$.ajax({
url: 'UpdateLight?lightName=' + lightName + "&state=" + state,
type: 'POST',
dataType: 'text',
success:function(data){
$.ajax({
url: 'GetAll',
type: 'GET',
dataType: 'text',
success: function(data) {
$('#resultScreen').empty();
getAllSwitches(data);
}});
}
})
});
}
非常感谢。
谢谢,这工作完美。 – Sam