Cordova 将复选框切换功能从单击更改为触摸启动
我正在开发cordova应用程序。由于click事件延迟了300毫秒,我不想使用它。如何将Cordova 将复选框切换功能从单击更改为触摸启动,cordova,checkbox,touchstart,Cordova,Checkbox,Touchstart,我正在开发cordova应用程序。由于click事件延迟了300毫秒,我不想使用它。如何将元素侦听的事件从单击切换为选中标记,例如触摸启动 我得到的最接近的结果是禁用复选框并添加此代码: $(':checkbox').each(function(){ $(this).bind('touchstart', function(){ if(this.checked) { this.checked = true;
元素侦听的事件从单击
切换为选中标记,例如触摸启动
我得到的最接近的结果是禁用复选框并添加此代码:
$(':checkbox').each(function(){
$(this).bind('touchstart', function(){
if(this.checked) {
this.checked = true;
} else {
this.checked = false;
}
})
});
不幸的是,touchstart不会触发。您可以使用此代码
document.querySelector("#idofelement").addEventListener("touchend", function() {
}
使用该代码,复选框事件将被调用两次。首先将调用touchstart事件,然后在300毫秒延迟后,单击事件将调用real event复选框。让我们试试这个代码
$(':checkbox').each(function(){
$(this).bind('touchstart', function(){
if(this.checked) {
this.checked = true;
} else {
this.checked = false;
}
}).bind('click', function(e) {
e.preventDefault();
});
});
首先,我需要对捕获的事件调用preventDefault()
另一个问题是,checked
不是复选框的实际jquery属性,我需要使用prop()
因此,最终起作用的是:
$('.divClassContainingCheckbox').each(function(){
$(this).bind('touchstart', function(e){
e.preventDefault(); // prevents click from triggering check
checkbox = $(this).find(':checkbox');
if(checkbox.is(":checked")) {
checkbox.prop('checked', false);
} else {
checkbox.prop('checked', true);
}
})
});
HTML:
此函数适用于我,我获取复选框标签的属性,然后通过编程方式检查输入类型checbox
function checkedCheckbox() {
var id = $(this).attr('for');
var element = $('#'+id);
var isChecked = element.prop("checked");
if(isChecked) {
$(element).attr("checked", false);
} else {
$(element).prop('checked', true);
}
}
这不会仍然让旧的EventListener监听复选框上的click事件,使其做出两次反应吗?它不会像这样工作,因为您提供的回调函数是空的。但是它也不会取消订阅正常的click
事件。您考虑过使用fastclick()吗?它消除了300毫秒的点击延迟。代码不是这样工作的,但是e.preventDefault()是我缺少的一个关键函数。所以你赢得了赏金:)对于一个工作版本,请看我的答案
function checkedCheckbox() {
var id = $(this).attr('for');
var element = $('#'+id);
var isChecked = element.prop("checked");
if(isChecked) {
$(element).attr("checked", false);
} else {
$(element).prop('checked', true);
}
}