dp
クラスを入力要素に割り当てることによってトリガーされるデフォルトのjqueryの日付ピッカーを使用しています。htmlで要素のクラスを設定すると正常に機能しますが、dp
クラスにjs(document.getElementById(eleId).className = 'dp';
)を割り当てると、ユーザーが入力をクリックしたときに日付ピッカーがトリガーされません。何か案が?
2 に答える
これは、datepicker
イベントを要素にバインドすると(セレクターを介して、おそらく$(".dp")
、その時点で見つかったものにのみバインドされるためです。その後はいつでも、あなたが言ったように、要素はクラスを取得する可能性があります(または私の提案は次のようなことをすることです:
<div id="container">
<!-- Your elements that may or may not have the class "dp" -->
</div>
<script type="text/javascript">
$("#container").on("click", "dp", function () {
$(this).datepicker('destroy').datepicker({showOn: 'both'}).focus();
});
</script>
もちろん、バインディングをに入れるだけで、にdocument.ready
渡されるオプションを変更することもできますdatepicker
。の代わりに、それをそれほど絞り込むことができない場合は、または何かを"#container"
使用することができます。また、何らかの方法で"body"
説明する必要があります。onfocus
ただし、jQueryはすでに含まれているため、可能な限りどこでも使用することをお勧めします。たとえば、コード:document.getElementById(eleId).className = 'dp';
は問題ありませんが、メソッドを使用しないのはなぜですか。また、セレクターaddClass
を使用しないのはなぜですか。"#"
好き:
$("#" + eleId).addClass("dp");
// and alternatively
$("#" + eleId).removeClass("dp");
使用の問題className
は、要素のクラスを操作するのが簡単ではないことです。を使用すると.className = "whatever"
、以前の値が上書きされますclassName
。もちろん、それを説明することはできますが、これにはjQueryを使用する方が簡単です。また、を使用する場合removeClass
、jQueryは要素のイベントバインディングを自動的に削除する場合としない場合がありますが、className
そのようなことはありません。クラスの削除や追加などを行うと、面倒になる可能性があります。
クラスがいつ割り当てられるかが重要です。datepickerモジュールをロードする前に、クラスを割り当てる必要があります。
それ以外の場合、datepickerは検出した入力をすべてロードしてから、停止します。そのイベントの後にクラスを割り当てると、ローダーがその役割を果たし、新しいアイテムに関心がないため、応答はありません。
または、クラスを要素に割り当てた後で、datepickerを再度呼び出すこともできます。