jQuery on('change')逻辑在ios 8.2 / 8.3中表现得很糟糕

时间:2015-06-08 10:49:29

标签: jquery ios safari mobile-safari addclass

我在移动设备中遇到了jQuery逻辑的奇怪行为 (在ios 8.2 / 8.3和4.1中),其工作罚款 chrome,mozilla和ie

我的要求:我有一个列表复选框,我可以从中选择一个,就像一个单选按钮(我的要求)。 有四个按钮( CREATE,VIEW,EDIT,DELETE )对应于提供的每个复选框。

当任何复选框选中时,我禁用创建按钮并启用VIEW,EDIT,DELETE按钮和

如果任何复选框未选中,我启用创建按钮并禁用VIEW / EDIT / DELETE按钮,我已为此编写了以下代码:

  

CREATE-button类名:'disable-on-check'

     

VIEW / EDIT / DELETE按钮类名:'enable-on-check'

$(':checkbox').on('change',function(){ 
var curr = $(this);                  
if(curr.is(':checked')){            
    $(".enable-on-check").addClass("click-enabled").removeClass("click-disabled");
    $(".disable-on-check").removeClass("click-enabled").addClass("click-disabled");                               
    $('.chkbx').prop("checked",false); //to make checkbox to behave like a radio button
    $(this).prop("checked",true);  //to make checkbox to behave like a radio button                             
}
else{
    $(".enable-on-check").removeClass("click-enabled").addClass("click-disabled");
    $(".disable-on-check").removeClass("click-disabled").addClass("click-enabled");
} });

我的问题:在mobile-safari中(ios 8.2 / 8.3和4.1) 当我检查任何复选框(超过两次或三次)时,CREATE按钮会突出显示而不是 VIEW / EDIT / DELETE按钮和

如果我取消选中,任何复选框都会启用VIEW / EDIT / DELETE按钮而不是 CREATE按钮 - 这正是反向行为我的逻辑。

请帮助我,为什么我只在移动游猎中遇到这个问题? 感谢提前

1 个答案:

答案 0 :(得分:1)

经过大量试验后,更改事件类型有助于我解决问题。

我在经验中观察到的是 .on('change')在某个实例中调用我的逻辑两次(不知道为什么)。所以我尝试了 .on('keydown click'),现在一切正常:)

最后答案是:

$(':checkbox').on('keydown click',function(){ 
var curr = $(this);                  
if(curr.is(':checked')){            
    $(".enable-on-check").addClass("click-enabled").removeClass("click-disabled");
    $(".disable-on-check").removeClass("click-enabled").addClass("click-disabled");                               
    $('.chkbx').prop("checked",false); //to make checkbox to behave like a radio button
    $(this).prop("checked",true);  //to make checkbox to behave like a radio button                             
}
else{
    $(".enable-on-check").removeClass("click-enabled").addClass("click-disabled");
    $(".disable-on-check").removeClass("click-disabled").addClass("click-enabled");
} });