0

私はカスタムチェックボックスに以下のコードを使用しました、

HTML

<div class="agree">
                                      <label for="agree_check" class="label_check"><input type="checkbox" class="agree_check" id="agree_check" />Agree</label>
                                  </div>

CSS

.has-js .label_check { padding-left: 34px; }
.has-js .label_check { background: url(../images/box1.png) no-repeat; }
.has-js label.c_on { background: url(../images/box1-with-mark.png) no-repeat; }
.has-js .label_check input { position: absolute; left: -9999px; }

脚本

<script type="text/javascript">
var d = document;
var safari = (navigator.userAgent.toLowerCase().indexOf('safari') != -1) ? true : false;
var gebtn = function(parEl,child) { return parEl.getElementsByTagName(child); };
onload = function() {

    var body = gebtn(d,'body')[0];
    body.className = body.className && body.className != '' ? body.className + ' has-js' : 'has-js';

    if (!d.getElementById || !d.createTextNode) return;
    var ls = gebtn(d,'label');
    for (var i = 0; i < ls.length; i++) {
        var l = ls[i];
        if (l.className.indexOf('label_') == -1) continue;
        var inp = gebtn(l,'input')[0];
        if (l.className == 'label_check') {
            l.className = (safari && inp.checked == true || inp.checked) ? 'label_check c_on' : 'label_check c_off';
            l.onclick = check_it;
        };
        if (l.className == 'label_radio') {
            l.className = (safari && inp.checked == true || inp.checked) ? 'label_radio r_on' : 'label_radio r_off';
            l.onclick = turn_radio;
        };
    };
};
var check_it = function() {
    var inp = gebtn(this,'input')[0];
    if (this.className == 'label_check c_off' || (!safari && inp.checked)) {
        this.className = 'label_check c_on';
        if (safari) inp.click();
    } else {
        this.className = 'label_check c_off';
        if (safari) inp.click();
    };
};
var turn_radio = function() {
    var inp = gebtn(this,'input')[0];
    if (this.className == 'label_radio r_off' || inp.checked) {
        var ls = gebtn(this.parentNode,'label');
        for (var i = 0; i < ls.length; i++) {
            var l = ls[i];
            if (l.className.indexOf('label_radio') == -1)  continue;
            l.className = 'label_radio r_off';
        };
        this.className = 'label_radio r_on';
        if (safari) inp.click();
    } else {
        this.className = 'label_radio r_off';
        if (safari) inp.click();
    };
};
       </script>

チェックボックスがオンになっているかどうかをチェックする必要があります。FFでは機能しますが、ChromeおよびSafariブラウザでは機能しません。

if (jQuery('#agree_check').is(':checked')) {
alert("checked");
}
else
{
alert("Not checked");
}

チェックボックスをオンにすると、FFでは「チェック済み」と表示されますが、ChromeとSafariでは「チェックなし」と表示されます。

どうした?

4

2 に答える 2

1

私のソリューションは、サーバー側でも機能します-codebehind(ラベルとチェックボックスのrunat = "server"属性)は、重要なブラウザーのチェック済み/非チェック状態を追加することで構成されています。たぶん、これはすべてのブラウザで機能し、ifステートメントをクリアします。

 var check_it = function () {
     var inp = gebtn(this, 'input')[0];
     if (this.className == 'label_check c_off' || (!safari && inp.checked)) {
         this.className = 'label_check c_on';
         if (chrome) inp.checked = true;
         if (safari) inp.click();
     } else {
         this.className = 'label_check c_off';
         if (chrome) inp.checked = false;
         if (safari) inp.click();
     }; 
};
于 2012-11-01T07:52:43.280 に答える
0

最後に私はこれに対する答えを見つけました、それはその条件を真にするために別の方法でチェックするだけです、

if (jQuery('#agree_check').is(':checked') || (jQuery('div.agree label').hasClass('c_on'))) {
alert("checked");
}
else
{
alert("Not checked");
}

これで、すべてのブラウザで正常に動作します。

ありがとう、ラヴィチャンドラン

于 2012-06-16T06:44:07.550 に答える