3

Web サイトからデータを取得し、その情報を Facebook に投稿する AJAX プログラムがあります。私の問題は非常に単純です。コールバック関数で HTML を生成する必要があります。ここにボタンがあります:

var city = "Beijing";
html+= "<td><input type=button value=FACEBOOK onclick=\"fb("+city+")\"></td>";
document.getElementById("myDiv").innerHTML = html;

変数「都市」があり、特定の値があるとします。上記のようなボタンを生成することで、関数 fb(city) に都市を渡すことができません。その関数を呼び出すことすらありません。ただし、パラメーターを削除すると機能します。

4

3 に答える 3

2
var city = "Beijing";
html+= "<td><input type=button value=FACEBOOK onclick=\"fb('"+city+"')\"></td>";
document.getElementById("myDiv").innerHTML = html;

あなたは一重引用符を忘れました:)。

NOT fb("+city+") よりも fb(北京) を生成する

しかし、fb('"+city+"') は fb('Beijing') を生成します。

于 2012-04-10T05:05:24.463 に答える
1

関数が処理されると、都市は「北京」に置き換えられるため、html フラグメントは次のように生成されます。

<td><input type=button value=FACEBOOK onclick="fb(Beijing)"></td>

ここでわかるように、北京には "" がありません。したがって、実際には存在しない変数として扱われます。

最も簡単な修正は次のとおりです。

html+= "<td><input type=button value=FACEBOOK onclick=\"fb('" + city + "')\"></td>";

実際には、目的を達成するためのより良い方法が他にもたくさんあります。また、html にインラインで追加するのではなく、javascript コードから「クリック」イベントをバインドする必要があります。そして、JavaScript関数からバインドすることで、実際に値をクロージャーに埋め込むことができます。

于 2012-04-10T05:10:50.157 に答える
0

文字列内の文字列内の文字列テクニックは、最終的には成長するものです。より良いテクニックは、onclick プロパティを使用してクリック イベントを割り当てることです。

var city = "Beijing";
var td = document.createElement("td");
var input = document.createElement("input");
input.setAttribute("type","button");
input.setAttribute("value","FACEBOOK");
input.onclick = function() {
    fb(city);
};

td.appendChild(input);
document.getElementById("myDiv").appendChild(td);

これにより、文字列内の文字列が読みにくくなることがなくなるだけでなく、#myDiv 要素に追加する DOM ノードが DOM の JavaScript によって確実に認識されるようになります。一部のブラウザーでは、innerHTML を使用して追加された DOM 要素をプログラムで認識するのに問題があります。私は Firefox と XUL ベースのブラウザーでその動作を経験しました。

余談ですが、jQuery はこの操作をよりスムーズに実行でき、ブラウザー間の互換性を保証しますが、それはjQueryタグの問題です。

于 2012-04-10T05:10:03.290 に答える