jQuery Uniform を使用して、入力/選択などのスタイルを設定しています。ただし、チェックボックスは機能しなくなりました。私は、ajax呼び出しから送信されたappending
データです。ロードされたら、$.uniform.update("input:checkbox")
を使用して新しいhtmlを更新します。入力を(非)チェックしようとすると、1回だけ機能します。もう一度チェック(解除)したい場合は、まったく変更されません。
niform Javascript を変更して、すべてのアクション(つまり、click
、focus
、blur
など)が_.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
これは、フォーム上の値を動的に変更する必要がある場合、 UniformJs
が均一要素の変更を更新する必要があるためです。
$('#checkbox').prop('checked',true);
$.uniform.update();
#checkbox
のみを更新する場合:
$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');
これを行うだけです:
$('#checkbox').prop('checked',true).uniform('refresh');
これは少し遅いかもしれませんが、うまくいけば誰かの助けになるでしょう。事前にチェックされたチェックボックスを探すために、統一コードに数行追加する必要がありました。このコードは、私にとっては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);
}
},
しばらく経ちましたが、同じ問題を抱えていましたが、簡単な解決策で解決しました。
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');
最もクリーンなソリューションではないかもしれませんが、すべてのブラウザーで正常に動作します。
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 も参照してください。これにより、後方互換性が向上し、問題に対処することができます。
Jqueryの最新バージョンでは、別の方法を使用して:checked値を評価すると考えています。少し古いバージョン(理想的ではありませんが)を使用すると、この問題が修正されました。しかし、それは少し前のことで、PixelMatrixはまだUniformを更新していないようです。
次のようなものを使用できませんでした
$("#checkbox").attr("checked", "true");
チェックボックスをオンにします
$("#checkbox").removeAttr("checked");
チェックを外しますか?
.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
}