web-dev-qa-db-ja.com

jQuery Uniform Checkboxは(チェックを解除しない)

jQuery Uniform を使用して、入力/選択などのスタイルを設定しています。ただし、チェックボックスは機能しなくなりました。私は、ajax呼び出しから送信されたappendingデータです。ロードされたら、$.uniform.update("input:checkbox")を使用して新しいhtmlを更新します。入力を(非)チェックしようとすると、1回だけ機能します。もう一度チェック(解除)したい場合は、まったく変更されません。

niform Javascript を変更して、すべてのアクション(つまり、clickfocusblurなど)が_.live_関数。 (つまり_.live("click",_)。これにより、何も機能しなくなります。

更新:

Uniform JSを完全に読んで、問題を発見しました。

_if(!$(elem).attr("checked")){
    //box was just unchecked, uncheck span
    spanTag.removeClass(options.checkedClass);
}else{
    //box was just checked, check span.
    spanTag.addClass(options.checkedClass);
}
_

.attr("checked")構文は失敗します。常にfalseを返します。どうして?知りません。これに加えて、元のinputを更新してchecked属性を削除したり、checked属性を設定したりしません。

公式Webサイトを調べたところ、チェックボックスの入力が更新されないことがわかりました。だから、私だけではありませんxP

私は少し調べて、チェックボックスがチェックされているかどうかを確認するためのさまざまな方法を見つけましたが、次の方法は失敗します:

_if ($(elem).attr("checked")) // The original.
if ($(elem).attr("checked") == true)
if ($(elem).is(":checked"))
if ($(elem).checked)
// and:
var check = $(elem).match(/checked=/);
if (check == null)
_

ガイダンスの言葉は大歓迎です〜:3

32
nderjung

シンプルなソリューション

これは、フォーム上の値を動的に変更する必要がある場合、 UniformJs が均一要素の変更を更新する必要があるためです。

$('#checkbox').prop('checked',true);
$.uniform.update();

編集

#checkboxのみを更新する場合:

$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');
57
Mick

これを行うだけです:

$('#checkbox').prop('checked',true).uniform('refresh');
19
moledet

これは少し遅いかもしれませんが、うまくいけば誰かの助けになるでしょう。事前にチェックされたチェックボックスを探すために、統一コードに数行追加する必要がありました。このコードは、私にとっては262行目から始まります。 Uniformバージョン1.7.5を使用しています。 「ジョンが追加」ノート間の行は、私が追加したものです。

        "click.uniform touchend.uniform": function(){
      if(!$(elem).attr("checked")){
        //box was just unchecked, uncheck span
        spanTag.removeClass(options.checkedClass);
      // Added by John to look for checkboxes with the attr "checked" that have been click to uncheck
      }else if(!$(elem).is(':checked')){
        spanTag.removeClass(options.checkedClass);
      // end addition by john
      }else{
        //box was just checked, check span.
        spanTag.addClass(options.checkedClass);
      }
    },
7
John Goodman

しばらく経ちましたが、同じ問題を抱えていましたが、簡単な解決策で解決しました。

Uniformはチェックボックスにspanを追加し、チェックされているかどうかにかかわらずクラスにcheckedを与えますが、ページのロード時のみです。ページが既にロードされている間にチェックボックスをオンまたはオフにすると、チェックが解除されます(またはチェックされます)が、spanが終わっているため、更新されていないことがわかります。手動で行う必要があります。

$('#myDiv input[type=checkbox]').attr('checked',true);
$('#myDiv input[type=checkbox]').parent().addClass('checked');

または

$('#myDiv input[type=checkbox]').attr('checked',false);
$('#myDiv input[type=checkbox]').parent().removeClass('checked');

最もクリーンなソリューションではないかもしれませんが、すべてのブラウザーで正常に動作します。

2
Jeff B.

jQuery 1.6.4は、jquery.uniform.jsで使用されるattr()関数の意味を変更しました。 attr()は、ページがロードされたときに属性があった状態を返します。属性の状態はNOWではありません。 prop()と呼ばれる置換関数があり、これはattr()が使用していたジョブを実行します。

プラグインを修正するには、attr("checked")の各出現箇所をprop("checked")に置き換えます。また、attr("disabled")prop("disabled")に変更します。

これでプロジェクトが修正されます。それは私のために働いた;-)

https://github.com/pixelmatrix/uniform/pull/167 も参照してください。これにより、後方互換性が向上し、問題に対処することができます。

2
Grant

Jqueryの最新バージョンでは、別の方法を使用して:checked値を評価すると考えています。少し古いバージョン(理想的ではありませんが)を使用すると、この問題が修正されました。しかし、それは少し前のことで、PixelMatrixはまだUniformを更新していないようです。

1
Danny

次のようなものを使用できませんでした

$("#checkbox").attr("checked", "true");

チェックボックスをオンにします

$("#checkbox").removeAttr("checked");

チェックを外しますか?

0
Mads Ohm Larsen

.attr().prop()に変更する必要はありません。

    "click.uniform touchend.uniform": function(){
        if(!$(elem).attr('checked')){
            //box was just unchecked, uncheck span
            spanTag.removeClass(options.checkedClass);

            //Added by PingOn
            $(elem).removeAttr('checked');
            //end addition by PingOn

            // Added by John
        }else if(!$(elem).is(':checked')){
            spanTag.removeClass(options.checkedClass);
            // end addition by john

            //Added by PingOn
            $(elem).removeAttr('checked');
            //end addition by PingOn
        }else{
            //box was just checked, check span.
            spanTag.addClass(options.checkedClass);

            //Added by PingOn
            $(elem).attr('checked','true');
            //end addition by PingOn
      }
0
PingOn