0

日付の値があります

  for(i=0;i<data['before'].length;i++) {
        var day = data['before'][i];               
        var dte = new Date(day);

Javaスクリプトから動的にdivのリンクとして日付を表示しようとしています。リンクをクリックすると、関数へのオブジェクトとしてdteを渡しdate_clickます。

$('#before_dates').append('<tr><td><a onclick="date_click('+dte+');" href="javascript:void(0)">'+dte.toDateString()+'</a></td></tr>');

リンクをクリックすると、

function date_click(date){
    alert("Hi..."+dte);
}

次のエラーが発生します:

エラー:SyntaxError:欠落)引数リストの後に
ソースコード:date_click(Fri Aug 31 2012 00:00:00 GMT + 0100(IST));

私はその小さなエラーを知っていますが、それを行う方法を見つけることができませんでした。どんな助けでも素晴らしいでしょう。

ありがとうございました

4

3 に答える 3

1

あなたが書くとき:

'...date_click('+dte+')';

実際に得られるものは次のとおりです。

'...date_click(' + dte.toString() + ')';

すなわち:

date_click(Fri Aug 31 2012 00:00:00 GMT+0100 (IST))

これは明らかに有効なJSではないため、報告されたエラーです。

dte文字列表現ではなく、実際の変数を渡そうとしているようです。date_click(dte)それが機能するためには、引用符なしで書くだけですが、これdteはグローバル変数である場合にのみ機能します(そしてそれらは悪いです!)。

ただし、jQueryを使用しているため、適切なDOM3イベントハンドラーを使用できる場合は、DOM0の「インライン」イベントハンドラーを使用しないでください。これらは(ここにあるように)引用符の問題を引き起こし、指定された関数が「グローバル」スコープにない限り機能しません。

更新された質問に基づいて、を使用data()して現在のオブジェクトをイベントハンドラーにバインドします。

function date_click(ev) {
    ev.preventDefault();
    var date = $(this).data('date');
    alert("Hi..." + date);
}

for (i = 0; i < data['before'].length; ++i) {
    var day = data['before'][i];  
    var dte = new Date(day);
    var $a = $('<a>', { text: dte.toDateString() }).data('date', dte);
    var $tr = $('<tr>').appendTo('#before_dates');
    var $td = $('<td>').appendTo($tr).append($a);
}

$('#before_dates').on('click', 'a', date_click);  // use event delegation

現在、これは非常に冗長ですが、必要なDOM要素を構築するためのクリーンな方法であることに注意してください。

于 2012-08-27T11:04:07.643 に答える
1

引用符がありません(したがって、構文エラー)

append('<tr><td><a onclick="date_click(\''+dte+'\');" href="javascript:void(0)">' ...)

@Alnitakの言うことに従ってください。それは物事を行うためのクリーンな方法です。

于 2012-08-27T11:04:55.990 に答える
0

jQueryを使用してイベントを動的にアタッチします。

var row = $('<tr><td><a href="#">' + dte.toDateString() + '</a></td><td>');

$('#before_dates').append( row );

row.find("a").click( function(e) {
    e.preventDefault();
    alert('Hi...' + dte);

});

そうすれば、文字列のさまざまなレベルの解釈をいじる必要がなくなり、この方法の方がはるかに簡単になります。

于 2012-08-27T11:04:53.323 に答える