0

ここで私の問題について多くのスレッドを読みましたが、解決策が見つかりませんでした.JQueryの王様ではないためかもしれません...

これは非常に簡単な例です:

新しい行を追加しようとすると、datepicker が機能しません。どうすればいいのかわからない。この関数を使用して、テーブルに新しい行を追加します。(実際には、多くのテーブルを含むhtmlページがあり、それぞれにdatepickerを使用しています)

    var champ_date_arrivee = document.createElement('input');
champ_date_arrivee.setAttribute('type','text');
champ_date_arrivee.setAttribute('size','10');
champ_date_arrivee.setAttribute('name','date_t');
champ_date_arrivee.setAttribute('value','');
champ_date_arrivee.setAttribute('id','date_t');
champ_date_arrivee.className='champ_date_input_tableau';
newCell1.appendChild(champ_date_arrivee);

そして、datepicker のこのコード:

$(document).ready(function(){

 $.datepicker.setDefaults($.datepicker.regional['fr']);
 $('.champ_date_input_tableau').datepicker({ /* action sur class date */

    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    yearRange: "c-70:c+70",
    clickInput:true,
 });

});

ご覧のとおり、champ_date_input_tableau というクラス名を使用しています。これは、他の方法で行う方法がわからないためです。

私はこれを試しました:

    var champ_date_arrivee = document.createElement('input');
champ_date_arrivee.setAttribute('type','text');
champ_date_arrivee.setAttribute('size','10');
champ_date_arrivee.setAttribute('name','date_t');
champ_date_arrivee.setAttribute('value','');
champ_date_arrivee.setAttribute('id','date_t');
champ_date_arrivee.className='champ_date_input_tableau';
    $(champ_date_arrivee).datepicker({
    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    yearRange: "c-70:c+70",
});
newCell1.appendChild(champ_date_arrivee);

あなたはこのリンクで結果を持っています。これはうまくいき ません。

このようなコードを使用する必要があることはわかっていますが、どうすればよいでしょうか?

 jQuery('.date-pick').removeClass('hasDatepicker').datepicker({
dateFormat: 'mm-dd-yy'
});

あなたは私の最後のチャンスです...

私の英語でごめんなさい、私はフランス人です。

ご協力ありがとうございました。

4

3 に答える 3

2

.on()、、.delegate()またはは本当に必要ありません.live()。Datepickerは、関数の下部に追加するだけで十分に賢くなりますajoutLigneAuTableauTransfert()。datepickerを適用した後にID属性を変更しているため、混乱しています。具体的には、実行後にdatepickerプラグインを呼び出しますmajNumLignesTabTransfert('ajout');

(1)にある2つのダブルアップコールを削除しますajoutLigneAuTableauTransfert()。(2)IEで失敗し、技術的にはjavascriptの構文エラーである最後の構成オプションの最後にコンマを追加していることにも気づきました。(3)後にdatepicker呼び出しを追加しますmajNumLignesTabTransfert('ajout');

これが私が説明する変更であり、それが機能していることを示しています。// ANT-MODインジケーターのjavascriptコメントを探してください。

http://jsfiddle.net/dfDNu/

于 2012-07-28T22:09:12.843 に答える
0

live()OK、jQueryのメソッドを使用する必要があるので

$('.champ_date_input_tableau').live('focusin', function() {
    $(this).datepicker();
});​ 

次に、さらに要素を追加して、liveこれも新しい要素にバインドします。

編集:

それはlive非推奨だと言われていますが、私が信じているのと同じように機能するものがありますon。したがって、常に最新バージョンを使用することに細心の注意を払っている場合は、先に進んでそれを使用してください

于 2012-07-28T21:39:51.787 に答える
0

コードが機能しない理由は、ページが読み込まれるときに、日付ピッカーが既存のフォーム項目にのみ接続され、新しい項目には適用されないためです。新しい行を追加するときは、追加したばかりの特定のアイテムで .datepicker() 関数を呼び出す必要があります。

Dorian's answer によると、これを動的に行うことができますが、LIVE を使用しないでください。(これに関するさまざまな問題の説明については、記事を参照してください。jQuery 1.7 で廃止されました。) 代わりに、on() 関数を調べる必要があります。このようなものが動作するはずです:

$('#BlocFormulaire').on('click', '.champ_date_input_tableau', function() {
   $(this).datepicker();
});
于 2012-07-28T21:40:05.177 に答える