试图动态生成一个javascript函数调用并传递一个字符串

时间:2011-11-29 16:52:33

标签: c# javascript

我有一个数据源,我无法改变,数据源包含一个带有Id的超链接,我可以使用它来检索我需要的数据。我创建了一个方法来转换超链接以调用javascript函数并从超链接传递擦除的id,但是我没有得到正确的结果。在当前状态下,除了将id var插入ClickIt方法之外,一切正常。对于此示例,id的值为djb137,当我单击新超链接时,返回的错误是'djb137未定义。我是否忽略了将参数传递给javascript函数的事情?

private string ScrubHref(string statementHtml)
    {
        string pattern = "href.*?\"(?<href>.*?)\"";

        return Regex.Replace(statementHtml, pattern, delegate(Match match)
        {
            string v = match.ToString();

            string id = Regex.Match(v, "\"([^\"]*?)\"").Groups[1].Value;

            string returnValue = "href=\"#\"" + "onclick=\"return ClickIt("+id+");\"";

            return returnValue;
        });
    }

有趣的是,如果我将retrunValue字符串更改为此

return v + "onclick=\"return ClickIt(this.href);\"";

然后我的javascript函数将整个href传递给它而没有问题。但我只需要Id而不是整个href。

2 个答案:

答案 0 :(得分:1)

您需要在将ID传递给函数调用时引用您的ID。

该行

string returnValue = "href=\"#\"" + "onclick=\"return ClickIt("+id+");\"";

应该是

string returnValue = "href=\"#\"" + "onclick=\"return ClickIt('"+id+"');\"";

正在发生的事情是它认为djb137是一个变量名,如果你没有以这种方式构建它们,请考虑方法调用的外观。以下

之间的区别是什么
return ClickIt(djb137); // looks like a variable identifier

return ClickIt('djb137'); // passing a string to the function call

答案 1 :(得分:1)

更改此行:

string returnValue = "href=\"#\"" + "onclick=\"return ClickIt("+id+");\"";

string returnValue = "href=\"#\"" + "onclick=\"return ClickIt('"+id+"');\"";

请注意其中的其他引号。