Cordova 将复选框切换功能从单击更改为触摸启动

Cordova 将复选框切换功能从单击更改为触摸启动,cordova,checkbox,touchstart,Cordova,Checkbox,Touchstart,我正在开发cordova应用程序。由于click事件延迟了300毫秒,我不想使用它。如何将元素侦听的事件从单击切换为选中标记,例如触摸启动 我得到的最接近的结果是禁用复选框并添加此代码: $(':checkbox').each(function(){ $(this).bind('touchstart', function(){ if(this.checked) { this.checked = true;

我正在开发cordova应用程序。由于click事件延迟了300毫秒,我不想使用它。如何将
元素侦听的事件从
单击
切换为选中标记,例如
触摸启动

我得到的最接近的结果是禁用复选框
并添加此代码:

$(':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);
  }
}