23

'含まれているJavaScript関数にパラメーターを渡すにはどうすればよいですか

var name ="Lauren O'Donald";

var htmlAnch='<a onclick="javascript:selectEmployee(1100,"'+name+'");return false;" 
                 href="javascript:void(0);">O'Donald, Lauren</a>';

 $(document).append($(htmlAnch));

'Lauren O'Donald'名前に一重引用符が含まれているため、javascript 関数は実行されていません。

パラメータを追加して'動的 html を準備して動作させるにはどうすればよいですか?

生成する動的コードは次のとおりです

 var rows = new StringBuffer();

 $(data).each(function(index) {
      rows.append(String.format('<tr><td><a href="No.aspx" 
                onclick="javascript:selectEmployee({3},\"{1} {2}\");return 
               false;">{0}</a></td></tr>',
                String.format("{0}, {1}", this.Surname, this.FirstName),
                this.Surname,
                this.FirstName,
                this.Id
            ));
   });
4

5 に答える 5

37

\先頭に追加することで、引用符/文字をエスケープできます。

var string = 'my string with "double quotes" and \'single quotes\'';
var string = "my string with 'single quotes' and \"double quotes\"";
//                                               ^              ^

動的文字列の使用:

var foo = "bar with 'quotes'";
var string = 'my string with "double quotes" and ' + foo.replace(/'/g, "\\'");
//my string with "double quotes" and bar with \'quotes\'
于 2013-10-16T09:24:10.460 に答える
6

次を使用してエスケープできます\

var htmlAnch='<a onclick="javascript:selectEmployee(1100,\'Lauren O\'Donald\');return false;" 
             href="javascript:void(0);">O\'Donald, Lauren</a>';

ただし、この質問にjQueryのタグを付けたので、より良い解決策は、イベントを要素に接続し、data-*属性を使用して関連情報を保存することです。これにより、醜いonX属性の使用を回避できます。これを試して:

var $htmlAnch = $('<a />' {
    text: "O'Donald, Lauren" ,
    data-id: 1100,
    data-name: "Lauren O'Donald"
}).click(function(e) {
    e.preventDefault();
    selectEmployee($(this).data('id'), $(this).data('name'));
});

$(document).append($htmlAnch);
于 2013-10-16T09:23:43.060 に答える
1

このようなことを試してください

    var htmlAnch='<a onclick="javascript:selectEmployee(1100,\'Lauren O\'Donald\');return false;" href="javascript:void(0);">O\'Donald, Lauren</a>';
于 2013-10-16T09:26:39.963 に答える
1

エスケープされた文字列を返す独自の関数を記述します。デモ

文字列を引数としてこの関数に渡すと、エスケープされた文字列が得られます。さらに文字をエスケープしたい場合は、ブロックリストに文字を追加することもできます

function remove_quotes(values1)
{
        var values = values1.toString();
        var str = "";
        var blockList = ['"','\'','\\']; // This is the list of key words to be escaped
        var flag = 0;
        for(var i = 0;i<values.length;i++)
        {
            for(var j=0;j<blockList.length;j++)
            {
                if(values[i] == blockList[j])
                {
                    flag = 1;
                    break;
                }
            }
            if(flag == 0)
            str += values[i];
            else
            {
                str += '\\';
                str += values[i];
                flag = 0;
            }
        }
        return str;

    }
于 2013-10-16T09:32:54.173 に答える
0

.aspx ファイルでは、次のように実行できます。

<a data-open="editTemplateOverrideModal" onClick="populateUp
dateModal('<%#Server.HtmlEncode(Convert.ToString(DataBinder.Eval(Container.DataItem, "Description")).**Replace("'", "\'")) %>')**">
于 2018-07-31T08:40:31.783 に答える