20

こんにちは、HTML の onclick 関数で複数の値を渡そうとしています。テーブルを作成するためにJavascriptを使用しています

var user = element.UserName;
var valuationId = element.ValuationId;
$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId + ',' + user + '\')">Re-Assign</a> </td>  </tr>');

しかし、私のJavascript関数では、userNameは未定義で、valuationIdはvaluationIdとUserNameを組み合わせた文字列です

function ReAssign(valautionId, userName) {
    valautionId;
    userName;

}
4

8 に答える 8

41

とが JavaScript 変数でvaluationIdありuser、ソース コードがプレーンな静的 HTML であり、決して生成されていない場合は、次のことを試してください。

<a href=# onclick="return ReAssign(valuationId,user)">Re-Assign</a>

それらが PHP から生成され、文字列値を含む場合は、次のように変数をエスケープ引用符で囲みます。

<?php
    echo '<a href=# onclick="return ReAssign(\'' + $valuationId + '\',\'' + $user + '\')">Re-Assign</a>';
?>

ロジックは、JavaScript を使用して (おそらく jQuery を使用して?) コードを生成する質問の更新されたコードに似ています: エスケープされた引用符を各変数に適用することを忘れないでください:

var user = element.UserName;
var valuationId = element.ValuationId;
$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId + '\',\'' + user + '\')">Re-Assign</a> </td>  </tr>');

物語の教訓は、

'someString(\''+'otherString'+','+'yetAnotherString'+'\')'

次のように評価されます。

someString('otherString,yetAnotherString');

あなたが必要とするのに対し:

someString('otherString','yetAnotherString');
于 2012-11-08T08:53:08.983 に答える
12

解決策: JS で生成された html の onclick で複数の引数を渡す

JS で生成された html の場合は、次のようにします (文字列ラッパーとして単一引用符を使用しています)。各引数は一重引用符で囲む必要があります。それ以外の場合、すべての引数は functionName('a,b') のような単一の引数と見なされ、値 a,b を持つ単一の引数になります。

文字列エスケープ文字 backslash() を使用して、最初の引数を一重引用符で閉じ、区切りコンマを間に入れてから、次の引数を一重引用符で開始する必要があります。(これは使用するマジックコードです'\',\''

例:

$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId  +'\',\'' + user + '\')">Re-Assign</a> </td>  </tr>');
于 2014-06-05T08:09:57.593 に答える
2

これを試してください

for static values--onclick="return ReAssign('valuationId','user')"
for dynamic values--onclick="return ReAssign(valuationId,user)"
于 2012-11-08T08:54:25.530 に答える
0

これは、文字列を関数に渡すためです。引用符を削除して実際の値を渡すだけです:

<a href=# onclick="return ReAssign(valuationId, user)">Re-Assign</a>

ReAssign 関数はtrueorを返すはずだと思いますfalse

于 2012-11-08T08:56:10.433 に答える
0

ここでいくつか...

onclick イベントが発生したときに関数を呼び出したい場合は、関数名とパラメーターだけが必要です。

次に、パラメータが変数 (変数のように見える) である場合、それらを引用符で囲む必要はありません。それだけでなく、これらがグローバル変数である場合は、「window」を追加する必要があります。その前に、それはすべてのグローバル変数を保持するオブジェクトだからです。

最後に、これらのパラメーターが変数でない場合は、スラッシュを除外してそれらの文字をエスケープする必要があります。onclick の値は二重引用符で囲まれているため、単一引用符は問題になりません。したがって、あなたの答えは次のようになります...

<a href=# onclick="ReAssign('valuationId', window.user)">Re-Assign</a>

迅速な解決策以上のものが必要な場合は、ここで注意すべき点がいくつかあります。

+ 演算子を使用して HTML の文字列を結合しようとしているように見えました。HTML はスクリプト言語であるため、HTML を記述しているときは、全体が単なる文字列そのものです。ブラウザが実行するコードではないため、今後はこれらをスキップできます(大量のものであり、すでに存在するものはすべて、ブラウザによって特別な意味を持つものです).

次に、実際にはユーザーを別の Web サイトに誘導せず、コードを実行するだけのアンカー タグ/リンクを使用しています。適切な CSS を使用して、アンカー タグ以外のものを使用して、希望どおりに表示するようにフォーマットします。設定にもよりますが、多くの場合、span タグで十分です。クラス (class="runjs" など) を指定し、そのための CSS のルールを用意します。リンクの動作を模倣するには、次のようにします。

.runjs {
    cursor: pointer;
    text-decoration: underline;
    color: blue;
}

これにより、とにかく使用していなかった href 属性を除外できます。

最後に、このリンクの onclick 属性の値を手書きで設定するのではなく、JavaScript を使用して設定することをお勧めします。ページのコードをページの構造から分離することで、ページをきれいに保ちます。クラスでは、これらすべてのリンクを次のように変更できます...

var links = document.getElementsByClassName('runjs');
for(var i = 0; i < links.length; i++)
    links[i].onclick = function() { ReAssign('valuationId', window.user); };

これは一部の古いブラウザーでは (getElementsByClassName メソッドが原因で) 機能しませんが、わずか 3 行であり、探していることを正確に実行します。これらの各リンクには、タグの onclick 値以外に変数が関連付けられていないことを意味する匿名関数が関連付けられています。さらに、必要に応じて、この方法でより多くのコード行を含めることができ、すべてが 1 つの整頓された場所にグループ化されます。

于 2012-11-08T09:25:52.240 に答える
-1
function ReAssign(valautionId, userName) {
   var valautionId 
   var userName 
 alert(valautionId);
 alert(userName);
  }

<a href=# onclick="return ReAssign('valuationId','user')">Re-Assign</a>
于 2012-11-08T09:00:06.230 に答える