JQuery移动自定义水平单选按钮在实际设备中不起作用

时间:2013-04-02 04:48:54

标签: javascript jquery css jquery-mobile jquery-mobile-radio

最近我在Stackoverflow上问了一个关于如何自定义水平jQuery-移动单选按钮的问题,您还可以通过此链接查看帖子How to customize horizontal jQuery-mobile radio buttons。开发人员用非常好的JSFiddle示例非常轻松地回答了这个问题。根据他的指示,我实现了自定义JQuery Mobile单选按钮,它在桌面浏览器中运行良好。

然而,当我检查实际设备(Galaxy S 2,IPhone 5,Mac模拟器和Android模拟器)时,它不像桌面浏览器那样工作。我不确定这里有什么问题,但我可以理解,我需要做一些小的调整来支持实际的设备。因此我不擅长JS,任何人都可以尽快调查。

这是由 Gajotres http://jsfiddle.net/Gajotres/779Kn/

完成的上一个JSFiddle示例
$(document).on('pagebeforeshow', '#index', function(){     
    $('<div>').addClass('checkBox').appendTo('fieldset div div.ui-radio label');
    $('input[type="radio"]').each(function(){        
        ($(this).is(':checked')) ? $(this).next().find(".checkBox").addClass('checked') : $(this).next().find(".checkBox").addClass('not-checked');
    });

    $(document).on('click', '.ui-radio', function(){      
        $('input[type="radio"]').each(function(){  
            $(this).next().find(".checkBox").addClass('not-checked').removeClass('checked');
        });

        if($(this).find('input[type="radio"]').is(':checked')){
           $(this).find('label div.checkBox').removeClass('checked').addClass('not-checked');
           $(this).find('input[type="radio"]').attr('checked' , false);
        } else {
           $(this).find('label div.checkBox').removeClass('not-checked').addClass('checked');             
           $(this).find('input[type="radio"]').attr('checked' , true);
        }        
    });   
});

.checkBox{
    width: 18px;
    height: 18px;
    background: #d9d9d9;
    border-radius: 3px;  
    margin: 0 auto;
    margin-bottom: 5px;
}

.not-checked, .checked {
    background-image: url("http://www.fajrunt.org/icons-18-white.png");
    background-repeat: no-repeat;
}

.not-checked {
    background-position: -18px 0;       
    background-color:#d9d9d9;
}

.checked {
    background-position: -720px 0;    
    background-color:#6294bc;
}

我创建了一个单独的链接,希望这可以帮助您快速检查设备。 http://www.apartmentslanka.com/ztest_calender/radio.html

* Stackoverflow仅供参考:我尝试从之前的帖子继续,但由于负责的开发人员无法回答或检查上一期,我创建了一个新帖子。

2 个答案:

答案 0 :(得分:3)

你真的需要耐心,我正在度假:)

以下是一个有效的例子:http://jsfiddle.net/Gajotres/779Kn/20/

这个版本应该适用于触摸设备和桌面浏览器:http://jsfiddle.net/Gajotres/779Kn/21/

点击事件已更改为 touchstart 事件,现在它也适用于移动设备。

$(document).on('pagebeforeshow', '#index', function(){     
    $('<div>').addClass('checkBox').appendTo('fieldset div div.ui-radio label');
    $('input[type="radio"]').each(function(){        
        ($(this).is(':checked')) ? $(this).next().find(".checkBox").addClass('checked') : $(this).next().find(".checkBox").addClass('not-checked');
    });

    $(document).on('touchstart', '.ui-radio', function(){      
        $('input[type="radio"]').each(function(){  
            $(this).next().find(".checkBox").addClass('not-checked').removeClass('checked');
        }); 

        if($(this).find('input[type="radio"]').is(':checked')){
           $(this).find('label div.checkBox').removeClass('checked').addClass('not-checked'); 
           $(this).find('input[type="radio"]').attr('checked' , false);
        } else {
           $(this).find('label div.checkBox').removeClass('not-checked').addClass('checked');             
           $(this).find('input[type="radio"]').attr('checked' , true);
        }        
    });   
});

答案 1 :(得分:1)

只需另外一条评论(以防将来有人发生此问题) - 较新版本的JQueryMobile提供了&#34; vclick&#34;与寻找&#34;触摸开始&#34;相同的事件在移动设备上,&#34;点击&#34;在桌面浏览器上。