4

我正在使用 javascript,我尝试将字符串传递给函数,就像这样

        //example string
        var f="a";

//add button that sends the value of f to the function
     document.getElementById("mydiv").innerHTML="<input type='button' id='myButton' value='Click here' onclick='gothere("+f+");'> ";

    function gothere(a){
    alert(a);
    }

我从来没有看到警报,在控制台中我看到a is not defined了(指的是我猜的 f?)

如果我将 f 设置var为数字,那么我会看到警报。

我错过了什么?

提前致谢

编辑

我在想也许像

var buttonnode= document.createElement('input');

document.getElementById("mydiv").appendChild(buttonnode);
buttonnode.onclick=gothere(f);

出于同样的原因不会工作?

4

5 回答 5

5

当您的 HTML get 被渲染时,您会得到onclick='gothere(a);',但实际a变量在此上下文中不存在,您希望将 f 的值作为字符串传递,因此您需要使用onclick='gothere(\""+f+"\");'. 注意括号内的额外引号。这将呈现onclick='gothere("a");'从而传递字符串。

使用数字时,它可以工作,因为调用onclick='gothere(5);'是有效的,因为变量不能被命名5,并且它传递了数字。

于 2013-10-21T23:08:26.253 回答
3

实际上,您a的代码中没有。您正在使用变量f来表示a. 因此,使用它可以帮助您:

var f="a";
// write the remains of the code as they are..

function gothere(f) {
  alert(f);
}

现在,当您调用该函数时,a浏览器中会出现警报。

另外,尝试将内容包装在""双引号中,让代码明白这是一个字符串而不是字符。

对于点击使用

onclick='gothere(" + f + ")'

现在,由你来写值。也许问题是因为您没有为f.

尝试检查错误。我确信不会有任何事情。

或者尝试使用属性字段并使用jQuery.

于 2013-10-21T22:55:45.740 回答
1

修复你的代码怎么样?您缺少变量 F 表示的值周围的引号。因此,当解析变量 F 时,函数变为gothere(a). whilea不是定义的变量(但它是一个值),因此是错误。

尝试这个 !

document.getElementById("mydiv").innerHTML="<input type='button' id='myButton' value='Click here' onclick='gothere(\""+f+"\");'> ";

修改的部分是 onclick='gothere(\""+f+"\");'> "

这应该适合你!

于 2013-10-21T23:05:02.103 回答
1

函数参数字符串值图像动态来自 JSON。由于 item.product_image2 是一个 URL 字符串,因此在参数内部调用 changeImage 时需要将其放在引号中。

我的函数 Onclick 内部传递参数。

items+='<img src='+item.product_image1+' id="saleDetailDivGetImg">';
items+="<img src="+item.product_image2+"  onclick='changeImage(\""+item.product_image2+"\");'>";

我的功能

<script type="text/javascript">
function changeImage(img)
 {
    document.getElementById("saleDetailDivGetImg").src=img;
    alert(img);
}
</script>
于 2015-07-29T06:32:15.267 回答
0
  1. 您需要对值参数使用单引号(请参阅@Nis 或@CDspace 答案)。
  2. 处理动态点击或其他事件的更好方法是事件绑定。例如,请参阅 jQuery 事件绑定。
于 2013-10-21T23:12:28.397 回答