Jquery 移动设备的复选框在 iOS 上使用 phonegap 更改触发两次(但在 Android 上工作)
Jquery Mobile's checkboxes change firing twice with phonegap on iOS (but working on Android)
我在 JQM/Phonegap 构建应用程序中使用复选框。
<div id="wavetypes" class=ui-grid-b>
<div class=ui-block-a>
<input type="checkbox" name="checkbox-t-2a" id="wavetypes_checkboxsmallwave" data-theme="b">
<label for="wavetypes_checkboxsmallwave">Small-wave</label>
</div>
<div class=ui-block-b>
<input type="checkbox" name="checkbox-t-2b" id="wavetypes_checkboxperf" data-theme="b">
<label for="wavetypes_checkboxperf">Performance</label>
</div>
<div class=ui-block-c>
<input type="checkbox" name="checkbox-t-2c" id="wavetypes_checkboxstepup" data-theme="b">
<label for="wavetypes_checkboxstepup">Step-up</label>
</div>
</div>
而我正在听他们这样的改变
$(document).on('pagecreate','#welcome-page', function(){
$(document).on('change','#wavetypes_checkboxsmallwave, #wavetypes_checkboxperf, #wavetypes_checkboxstepup',function(){
console.log('-------------------');
console.log(e.target.tagName.toUpperCase()+' : ' + $(this).attr('id') +', is checked ? : '+$(this).is(":checked"));
if (e.target.tagName.toUpperCase() === "LABEL") {
return;
}
var proId = $('#chosenpro').find(":selected").val();
var brandid = $('#chosenbrand').find(":selected").val();
console.log(proId);
console.log(brandid);
if ( !$.isNumeric(proId) ) {
console.log("proId is not numeric");
if ( !$.isNumeric(brandid) ) {
console.log("brandid is not numeric");
//resetModelsListView(prodata, false, 0, 0, 0);
//addBoardAndLogoInModelListView();
} else {
var targetbrand = prodata[brandid]['brand'];
//resetModelsListView(prodata, false, 0, targetbrand, 0);
//addBoardAndLogoInModelListView();
}
} else {
console.log("proId IS numeric");
var targetproName = prodata[proId]['name'];
var targetbrand = prodata[brandid]['brand'];
//LISTVIEW
//resetModelsListView(prodata, false, 0, targetbrand, targetproName);
//addBoardAndLogoInModelListView();
}
});
...但是当我在 Phonegap + iOS.
上点击它们时,这些框没有被选中
它在桌面或 Phonegap + Android.
上运行良好
你能帮忙吗?
编辑:似乎 js 被绑定了两次...所以复选框选中和取消选中...但我不明白为什么...
编辑:
该事件在 iOS 上触发了两次,这是控制台输出(先选中然后取消选中...很奇怪!!):
-------------------
INPUT : checkboxperf, is checked ? : true
-------------------
INPUT : checkboxperf, is checked ? : false
几个提示...
我在使用您使用的事件侦听器构造时遇到了很多麻烦,所以我只是这样做:
$('#welcome-page').on('pagecreate') function...
当然,尽管并不总是必要,但我会先打开 "off" 事件侦听器,然后再打开它们。这有助于防止我多次绑定到单个事件。
$('#welcome-page'.off('pagecreate');
$('#welcome-page'.on('pagecreate') function...
这似乎是 jQuery 移动版中的错误。我通过阻止点击的默认行为并手动切换输入检查值来解决它:
$(document).on('click', '.ui-checkbox', function (event) {
event.stopPropagation();
event.preventDefault();
var $checkboxInput = $(this).find('input');
var isChecked = $checkboxInput.is(':checked');
$checkboxInput.attr('checked', !isChecked).checkboxradio('refresh');
// do your stuff
});
我在 JSFiddle (Chrome) 和 iPhone 4S (iOS 8.1) 中对此进行了测试。此解决方案在浏览器中似乎不起作用,但在我的 iOS 的 Phonegap 应用程序中却可以。这表明它可能也不适用于其他平台。
如果您的目标是多个平台,我建议您对这些平台使用旧的处理程序,并在处理程序中使用代码。
有同样的问题并通过删除 "label" 元素上的 "for" 属性解决了这个问题。
我的元素嵌套如下:
<label><input type="checkbox" id="opt1" data-mini="true" data-iconpos="right">Option label here</label>
猜测这是 jQuery Mobile 1.4.5(jQuery 1.11.1)中的错误。在我的例子中,复选框是分组的还是单个的都没有关系。
我在 JQM/Phonegap 构建应用程序中使用复选框。
<div id="wavetypes" class=ui-grid-b>
<div class=ui-block-a>
<input type="checkbox" name="checkbox-t-2a" id="wavetypes_checkboxsmallwave" data-theme="b">
<label for="wavetypes_checkboxsmallwave">Small-wave</label>
</div>
<div class=ui-block-b>
<input type="checkbox" name="checkbox-t-2b" id="wavetypes_checkboxperf" data-theme="b">
<label for="wavetypes_checkboxperf">Performance</label>
</div>
<div class=ui-block-c>
<input type="checkbox" name="checkbox-t-2c" id="wavetypes_checkboxstepup" data-theme="b">
<label for="wavetypes_checkboxstepup">Step-up</label>
</div>
</div>
而我正在听他们这样的改变
$(document).on('pagecreate','#welcome-page', function(){
$(document).on('change','#wavetypes_checkboxsmallwave, #wavetypes_checkboxperf, #wavetypes_checkboxstepup',function(){
console.log('-------------------');
console.log(e.target.tagName.toUpperCase()+' : ' + $(this).attr('id') +', is checked ? : '+$(this).is(":checked"));
if (e.target.tagName.toUpperCase() === "LABEL") {
return;
}
var proId = $('#chosenpro').find(":selected").val();
var brandid = $('#chosenbrand').find(":selected").val();
console.log(proId);
console.log(brandid);
if ( !$.isNumeric(proId) ) {
console.log("proId is not numeric");
if ( !$.isNumeric(brandid) ) {
console.log("brandid is not numeric");
//resetModelsListView(prodata, false, 0, 0, 0);
//addBoardAndLogoInModelListView();
} else {
var targetbrand = prodata[brandid]['brand'];
//resetModelsListView(prodata, false, 0, targetbrand, 0);
//addBoardAndLogoInModelListView();
}
} else {
console.log("proId IS numeric");
var targetproName = prodata[proId]['name'];
var targetbrand = prodata[brandid]['brand'];
//LISTVIEW
//resetModelsListView(prodata, false, 0, targetbrand, targetproName);
//addBoardAndLogoInModelListView();
}
});
...但是当我在 Phonegap + iOS.
上点击它们时,这些框没有被选中它在桌面或 Phonegap + Android.
上运行良好你能帮忙吗?
编辑:似乎 js 被绑定了两次...所以复选框选中和取消选中...但我不明白为什么...
编辑: 该事件在 iOS 上触发了两次,这是控制台输出(先选中然后取消选中...很奇怪!!):
-------------------
INPUT : checkboxperf, is checked ? : true
-------------------
INPUT : checkboxperf, is checked ? : false
几个提示...
我在使用您使用的事件侦听器构造时遇到了很多麻烦,所以我只是这样做:
$('#welcome-page').on('pagecreate') function...
当然,尽管并不总是必要,但我会先打开 "off" 事件侦听器,然后再打开它们。这有助于防止我多次绑定到单个事件。
$('#welcome-page'.off('pagecreate');
$('#welcome-page'.on('pagecreate') function...
这似乎是 jQuery 移动版中的错误。我通过阻止点击的默认行为并手动切换输入检查值来解决它:
$(document).on('click', '.ui-checkbox', function (event) {
event.stopPropagation();
event.preventDefault();
var $checkboxInput = $(this).find('input');
var isChecked = $checkboxInput.is(':checked');
$checkboxInput.attr('checked', !isChecked).checkboxradio('refresh');
// do your stuff
});
我在 JSFiddle (Chrome) 和 iPhone 4S (iOS 8.1) 中对此进行了测试。此解决方案在浏览器中似乎不起作用,但在我的 iOS 的 Phonegap 应用程序中却可以。这表明它可能也不适用于其他平台。
如果您的目标是多个平台,我建议您对这些平台使用旧的处理程序,并在处理程序中使用代码。
有同样的问题并通过删除 "label" 元素上的 "for" 属性解决了这个问题。
我的元素嵌套如下:
<label><input type="checkbox" id="opt1" data-mini="true" data-iconpos="right">Option label here</label>
猜测这是 jQuery Mobile 1.4.5(jQuery 1.11.1)中的错误。在我的例子中,复选框是分组的还是单个的都没有关系。