0

単純かどうかはわかりませんが、これについてはあなたの助けが必要です:

jQuery でボタンとリンクを動的に作成する必要があります。XML からロードされたデータは配列に入れられ、次のようになりました。

「カテゴリ」「ユーザー」などのボタンのいずれかをクリックすると、各カテゴリのボタンを作成する関数が起動します f.ex.: これらのボタンによって起動される関数を作成しましょう: "something..." を含む txt を含む categoryID 属性を持つ XML を検索し、#tester に追加します。

function clickedCat(cat){
      alert("test btn" + cat); // to check if function started
      // here just some script search 'cat' in XML etc...
    })
}

ここで、関数は動的に作成されたボタンによってトリガーされる必要があります f.ex.:

function showCatName(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++){
    qw = catIDArr[i];
    $("<div id='showCatName"+qw+"'></div>").html("<input id='showCatName"+qw+"' type='button' title='showCatName"+qw+"' value='showCatName"+qw+"' />")
                        .click(function(event){clickedCat(qw)}).appendTo("#categories");
    }
}

しかし、ここで作成されたボタンは、それらすべてに対して同じ値を持っています - ロードされた最後のqw...

Q: qw 値を記憶させるにはどうすればよいですか? btn ごとに異なりますか? したがって、btn[0] は qw[0] を起動し、btn[1] は qw[1] を起動します...

2番目のこと-同じ問題ですが、それをhtmlリンクに入力する必要があります:

function showCatName2(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++){
    qw2 = catIDArr[i];
    $("<div id='showCatName"+qw2+"'></div>")
    .html("<a href='#' onclick:clickedCat("+qw2+")> Test btn"+qw2+"</a>")
    .appendTo("#categories2");
    }
}

onclick がまったく機能していないようです...

Q1: 異なる値で関数を起動するボタンを動的に作成するようにするにはどうすればよいですか?

Q2: 上記と同様ですが、ボタンの代わりにリンクに配置する必要があります

事前に助けてくれてありがとう、ルーカス

4

1 に答える 1

0

で閉鎖の問題が発生していshowCatName()ます。あなたがこれを言うとき:

function(event){ clickedCat(qw) }

qw関数への参照をバインドしていますが、これは評価されません qwqw変数はクリック ハンドラーがトリガーされたときに評価され、の値はループが終了したときの値になりqwます。すべてのクリック ハンドラーは同じqw値を持ちます。これは、すべてのクリック ハンドラーがまったく同じ変数を共有しているためです。これに対する通常の解決策はqw、クリック ハンドラーを作成するときに強制的に評価されるようにすることです。

function make_click(qw) {
    return function() { clickedCat(qw); };
}
// ...
function showCatName(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++) {
        qw = catIDArr[i];
        $("<div id='showCatName"+qw+"'></div>")
            .html("<input id='showCatName"+qw+"' type='button' title='showCatName"+qw+"' value='showCatName"+qw+"' />")
            .click(make_click(qw))
            .appendTo("#categories");
    }
}

代わりにすぐに実行されるインライン関数を使用できますmake_click()が、クロージャーに問題がある場合は、上記の方がおそらく明確です。

onclick:clickedCatHTMLでは何も意味しないため、2番目のものは機能しません。おそらくあなたが意味しonclick=clickedCatた。qw2このアプローチでは、おそらく引用の問題に遭遇するでしょう。

于 2011-02-21T03:38:30.447 に答える