Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移动safari还是jquery BUG?在html标记标签onclick="&引用;然后单击()失败_Jquery_Html_Input_Safari_Click - Fatal编程技术网

移动safari还是jquery BUG?在html标记标签onclick="&引用;然后单击()失败

移动safari还是jquery BUG?在html标记标签onclick="&引用;然后单击()失败,jquery,html,input,safari,click,Jquery,Html,Input,Safari,Click,我发现,下面的代码确实有效 <label onclick="alert('alert')"> <input id="testinput" type="radio" name="test" autocomplete="off" /> clicktest </label> 对于那些遇到相同问题的人,这里是我的解决方法,它显然只针对input[type=“radio”]的用法,并在无线电输入发生变化时读取单击标签的结果: $('section.ta

我发现,下面的代码确实有效

<label onclick="alert('alert')">
    <input id="testinput" type="radio" name="test" autocomplete="off" />
    clicktest
</label>
对于那些遇到相同问题的人,这里是我的解决方法,它显然只针对
input[type=“radio”]
的用法,并在无线电输入发生变化时读取单击标签的结果:

$('section.tabbox input[type=radio]').change(function(){
    var el = $(this);
    if (el.is(':checked')) {
        var tbb = el.closest('section.tabbox');
        var index = tbb.find('input[type=radio]').index(el);
//--- do more stuff with index
//--- e.g. $('section.tabbox').find('label:eq('+index+').addClass('clicked')
    }
});
但是,如果inputs属性已被选中,但需要标签上的click事件,该怎么办?只需更改两次:-)


我只在iPad mini上的mobile safari中发现了这种行为,其他浏览器似乎没有受到影响。在safari或jquery中,这是一个bug吗?

希望我找到的这个解决方案将来会稳定(如有必要,将发布更新)

我发现

  • 桌面Firefox和桌面Safari在单击
    label

  • 桌面Chrome同时触发,单击
    标签的事件,然后聚焦/单击
    输入

  • mobile Safari仅发射点击
    输入上的事件

这是我的解决方案,它使用
navigator.userAgent
,只有在用户代理检测到移动Safari时才接受输入[type=radio]上的点击事件(欢迎改进)。此函数收集
onclick=“…”
以及
。从相关标签单击(…)
事件(通过其
属性),并以编程方式触发它

$('input[type=radio]').on('click focus',function(){
    var el = $(this);
    el.blur();
    if (/iPhone|iPad|iPod/i.test(navigator.userAgent) && /AppleWebKit/i.test(navigator.userAgent)) {    
        $('label[for='+el.attr('id')+']').trigger('click');
    }
});
这似乎是一个值得注意的解决办法

更新日期2017/01/03

取消了
焦点
符号,因为它没有意义。现在仅使用
单击
表示法,如果存在与
-属性匹配的
标签
,则现在还包括测试。这个检查对我来说似乎很重要,因为在同一页上可能会出现两种html标记的可能性(参见上面问题的开头):

$('input[type=radio]').on('click',function(){
    var el = $(this);
    var label = $('label[for='+el.attr('id')+']');
    if (label.length && /iPhone|iPad|iPod/i.test(navigator.userAgent) && /AppleWebKit/i.test(navigator.userAgent)) {    
        label.trigger('click');
    }
});

干杯

提到的
将其更改两次
只是一个未经测试的想法,未经测试是因为我不知道如何设置它:-),这是另一个解决方法的结果:mobile safari需要在编程更改后重新呈现
select
元素,例如:
$('select').val(newval).change().css('display','none').css(“显示”、“内联块”)
$(thisinput).prop('checked',false).prop('checked',true)
$('input[type=radio]').on('click focus',function(){
    var el = $(this);
    el.blur();
    if (/iPhone|iPad|iPod/i.test(navigator.userAgent) && /AppleWebKit/i.test(navigator.userAgent)) {    
        $('label[for='+el.attr('id')+']').trigger('click');
    }
});
$('input[type=radio]').on('click',function(){
    var el = $(this);
    var label = $('label[for='+el.attr('id')+']');
    if (label.length && /iPhone|iPad|iPod/i.test(navigator.userAgent) && /AppleWebKit/i.test(navigator.userAgent)) {    
        label.trigger('click');
    }
});