复选框事件处理程序抛出错误的点击事件在chrome浏览器,safari工作良好的键盘事件
checkbox event handler throws error for click event in chrome, safari works fine with keyboard event
我有一个动态创建的复选框列表。当复选框的状态发生变化时,将执行一个函数。无论用户是单击复选框,还是使用键盘输入更改复选框,该功能在firefox 3.6中都能完美运行。在chrome或safari中,该函数在使用键盘时执行得很好,但在单击鼠标时就会出错。我似乎找不到为什么代码的行为不同于鼠标点击和键盘输入。
下面是我认为是相关的代码:
var q_id = $j('label:contains("SCORP Statewide Need ")').attr('for');
console.log(q_id); //writes out answer id a_721
ajax post将创建一个复选框列表:
if(found == true){
output+="<div name='"+q_id+"'><input type='checkbox' name='"+q_id+"' id='"+q_id+"."+i+"' class='check' checked='checked' onChange='saveStateNeed("+q_id+")' value='"+list[i]+"'/>";
}else{
output+="<div name='"+q_id+"'><input type='checkbox' name='"+q_id+"' id='"+q_id+"."+i+"' class='check' onChange='saveStateNeed("+q_id+")' value='"+list[i]+"'/>";
}
output+=" <label name='l_"+q_id+"' for='"+q_id+"."+i+"' id='l_"+q_id+"."+i+"'>"+ list[i] +"</label></div>";
output+="<div class='clearboth'></div><br/>";
$j('##div_'+q_id).append(output);
所有这些都可以在所有浏览器中完美生成。错误在回调函数saveStateNeed();
function saveStateNeed(list){
console.log('in saveStateNeed');
console.log(list);// prints out an array of the checkboxes [input#a_721.0.check Non-motorized trails, input#a_721.1.check Sports a...ayfields, input#a_721.2.check Land Acq...projects, input#a_721.3.check Picnicki...cilities, input#a_721.4.check Nature s...wildlife]
// **in safari i get function()** but it still works with keyboard, fails with click
// the next assignment $me fails.
var $me = $j('input [name="'+list+'"]');
var isChecked = $me.context.activeElement.checked;
var $value = $me.context.activeElement.attributes['value'].nodeValue;
console.log($me); out puts the object selected as an expandable firebug object []
console.log($value); outputs label for object: Picnicking/day use facilities
console.log(isChecked); outputs true false
if(isChecked){
}else{
}
$j.ajax({
type: "POST",
url: });
}
这是一种复杂的,我只是希望有人知道为什么我会得到一个不同的结果从点击然后键盘输入,当相同的代码实际上正在执行。我真的希望这不会太复杂。谢谢你看这个,我真的很感谢你的任何评论或建议。欢呼。
如果您将复选框行为附加为委托事件而不是显式赋值,您可能会有更好的运气。
看起来你在使用jQuery,所以你可以这样做:
$j('input.check').live('change', function(event) {
var jThis = $j(this);
// grab id from checkbox
var ID = jThis.attr('id').split('.')[0];
saveStateNeed(ID, jThis.attr('checked'));
return true;
});
也:你确定错误是在事件处理程序,而不是在saveStateNeed
函数?
saveStateNeed
以接受两个值:ID和布尔值。像这样:function saveStateNeed(ID, bChecked) {
console.log('checkbox ' + ID + ' is ' + (bChecked) ? 'checked' : 'not checked');
if(bChecked) {
// do something
} else {
// do something else
}
}
相关文章:
- Safari扩展中是否有任何Safari Popover隐藏事件
- 在移动 Safari 上向下拖动时,触摸事件停止触发 - iPad HTML5
- 在iPad上运行时,Mobile Safari中即将切换选项卡的Pagehide事件不会触发
- 如何将Javascript事件附加到移动Safari后退按钮
- HTML中的onclick事件<选择>无法运行Chrome和Safari
- 在 Safari 浏览器 (iOS 7) 上,在捏合缩放下调整事件大小,仅在横向缩放中
- 语音更改事件未在 Safari 中触发
- Mobile Safari 忽略了我的自动对焦 jQuery 事件
- 在点击事件上从父窗口调用子窗口的功能在 Safari 和 Chrome 上不起作用
- Onchange 事件未在 Safari 浏览器中触发
- 使用Apple Script选择带有*浏览器事件*的Safari下拉菜单
- 控制Apple Ipad上的事件's Safari
- 奇怪的点击事件气泡在iPhone safari上,它在冒泡到document.body之前停止
- 重新加载页面时未在 Safari 上触发加载事件
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 动态创建的ahref点击事件在firefox或safari中不起作用
- Safari上的Colorbox关闭事件没有响应
- 移动Safari中的Google Maps v3 InfoBox事件传播
- Safari中没有密钥设置事件
- 事件.safari上的keyCode和charCode显示“未定义”;用于德国特殊标志