onclick传递参数,js自动触发onclick
本篇文章给大家谈谈onclick传递参数,以及js自动触发onclick对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
使用JSON.stringify() 将数据传递给 onclick 函数
使用 JSON.stringify()将数据传递给 onclick函数是一种安全且有效的方法,可避免直接嵌入对象导致的 [object Object]错误,并确保数据完整传递。
以下是具体实现方式及关键注意事项的详细说明:
核心实现步骤动态生成 HTML时嵌入 JSON字符串
在模板字符串中,通过 `${JSON.stringify(song)}`将对象转换为 JSON格式的字符串。
确保 onclick属性使用单引号包裹,JSON字符串使用双引号,避免语法冲突。
list+= `<div class="songitem" style="background:${song.background};"><img src=${song.coverpath} alt="${song.SongName}"><span class="name">${song.SongName}</span><span class="songlistplay"><span class="songTime">${song.time}</span><i class="far fa-play-circle songitemplay" onclick='makeAllPlays(${JSON.stringify(song)})'></i></span></div>`;事件处理函数接收解析后的对象
在 makeAllPlays函数中,参数 song会自动解析为 JavaScript对象,可直接访问其属性(如 song.SongName)。
function makeAllPlays(song){ console.log("歌曲信息:", song);//输出完整对象//示例:播放歌曲逻辑}关键注意事项引号嵌套规则
onclick属性值必须用单引号(')包裹。
JSON字符串内部使用双引号("),例如:onclick='makeAllPlays({"SongName":"我的歌","time":"3:30"})'
数据安全性与转义
若对象属性包含用户输入(如未过滤的文本),需对 JSON字符串进行转义,防止 XSS攻击。
示例转义方法(使用 textContent或库如 he):function escapeHtml(unsafe){ return unsafe.toString().replace(/[&<>'"]/g,(char)=>({'&':'&','<':'<','>':'>',"'":''','"':'"'}[char]));}const safeJson= escapeHtml(JSON.stringify(song));
性能优化
避免传递大型对象:仅传递必要属性(如{ id: 1, name:"歌名"}),减少 HTML体积。
替代方案:若数据量极大,可通过 data-*属性存储唯一标识(如 data-songid),在事件中通过 ID查询完整数据。
<i class="songitemplay" data-songid="${song.id}" onclick="makeAllPlaysById(this)"></i>function makeAllPlaysById(element){ const songId= element.dataset.songid; const song= fetchedSongs.find(s=> s.id== songId);//从全局数组查询 console.log(song);}
完整代码示例async function loadSongs(){ const res= await fetch('./songApi/songs.json'); const fetchedSongs= await res.json(); let list=""; fetchedSongs.forEach((song)=>{//转义 JSON字符串(可选,根据数据安全性需求) const escapedJson= JSON.stringify(song).replace(/</g,'u003c').replace(/>/g,'u003e'); list+= `<div class="songitem" style="background:${song.background};"><img src=${song.coverpath} alt="${song.SongName}"><span class="name">${song.SongName}</span><span class="songlistplay"><span class="songTime">${song.time}</span><i class="far fa-play-circle songitemplay" onclick='makeAllPlays(${escapedJson})'></i></span></div>`;}); document.getElementById('songListContainer').innerHTML= list;}function makeAllPlays(song){ console.log("播放歌曲:", song.SongName);//实际播放逻辑(如调用音频API)}window.onload= loadSongs;总结优势:JSON.stringify()确保对象以标准格式传递,避免解析错误,适合动态内容生成。适用场景:需传递简单对象且数据量较小时(如配置项、元数据)。扩展建议:对于复杂交互,结合 data-*属性或事件委托(Event Delegation)可提升性能与可维护性。
详解a标签添加onclick事件的几种方式
我们常用的在a标签中有点击事件:
1. a rel="external nofollow" href="javascript:js_method();" rel="external nofollow"
这种方法在传递this等参数的时候很容易出问题,而且javascript:协议作为a的href属性的时候不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放。W3C标准不推荐在href里面执行 javascript语句
2. a rel="external nofollow" rel="external nofollow" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" onclick="js_method()"
这种方法是很多网站最常用的方法,也是最周全的方法,onclick方法负责执行js函数,而void是一个操作符,void(0)返回undefined,地址不发生跳转。而且这种方法不会像第一种方法一样直接将js方法暴露在浏览器的状态栏。
3.a rel="external nofollow" rel="external nofollow" href="javascript:;" rel="external nofollow" rel="external nofollow" onclick="js_method()"
这种方法跟跟2种类似,区别只是执行了一条空的js代码。
4.a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="js_method()"
这种方法也是网上很常见的代码,#是标签内置的一个方法,代表top的作用。所以用这种方法点击后网页后返回到页面的最顶端。
5.a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="js_method();return false;"
这种方法点击执行了js函数后return false,页面不发生跳转,执行后还是在页面的当前位置。
综合上述,在a中调用js函数最适当的方法推荐使用:
a rel="external nofollow" rel="external nofollow" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" onclick="js_method()"
a rel="external nofollow" rel="external nofollow" href="javascript:;" rel="external nofollow" rel="external nofollow" onclick="js_method()"
a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="js_method();return false;"
以上所述是小编给大家介绍的a标签添加onclick事件的几种方式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
delphi的函数
与过程一样,函数的程序代码也执行特定的工作。它和过程的差别为:函数执行时会返回一个值,而过程则没有返回值。函数可以用来赋给一个属性或变量;也可以使用返回值来决定程序的流程。前文中实际上已经接触过了函数。在讲述变量时,曾用到过下面的程序段:Edit1.Text:=IntToStr(X+Y);其中,IntToStr(Value)把一个LongInt类型的数值转化为字符串的值,Value是IntToStr唯一的参数,它可以是一个整形的值、变量、属性或产生整形值的表达式。调用函数,必须把返回值赋给和此返回值类型兼容的变量或属性。
有些函数返回一个True或False的布尔量,用户的程序可以根据返回值来决定跳转。下文的例程讲述了函数返回值为Boolean的判断用法:
在窗体中加入一个ColorDialog对象和一个Name属性为ChangeColor的按钮。为按钮的OnClick事件建立事件处理过程如下:
procedureTForm1.ChangeColorClick(Sender:TObject);
begin
if ColorDialog1.Execute then
Form1.Color:=ColorDialog1.Color
else
Form1.Color:=clRed;
end;
此事件处理过程使用一个返回Boolean值的Execute方法。按动按钮,并在颜色对话框中选择一个颜色。如果按动OK按钮,ColorDialog.Execute方法将返回True,则Form1.Color将被赋值为ColorDialog1.Color,窗体显现您选用的颜色;如果按动颜色对话框的Cancel按钮,方法将返回False值,窗体将变为红色。
跳转语句
ObjectPascal的跳转语句有if和case两个。
if语句
if语句会计算一个表达式,并根据计算结果决定程序流程。在上文的例程中,根据ColorDialog.Execute的返回值,决定窗体的背景颜色。if保留字后跟随一个生成Boolean值True或False的表达式。一般用“=”作为关系运算符,比较产生一个布尔型值。当表达式为True时,执行then后的语句。否则执行else后的代码,if语句也可以不含else部分,表达式为False时自动跳到下一行程序。
if语句可以嵌套,当使用复合语句表达时,复合语句前后需加上begin…end。else保留字前不能加“;”,而且,编译器会将else语句视为属于最靠近的if语句。必要时,须使用begin…end保留字来强迫else部分属于某一级的if语句。程序代码在调用一个过程或函数时,通常用参数传递数据到被调用的过程或函数中。最常用的参数有数值参数、变量参数和常量参数三种。由被调用过程或函数定义的参数为形参,而由调用过程或函数指明的参数叫实参。在NoValue函数中,说明函数体中的AnEditBox是形参,而调用时在ifNoValue(Edit1)…中,Edit1是实参。
数值参数在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到过程的外面。试看下面的例程:
procedureCalculate(CalNo:Integer);
begin
CalNo:=CalNo*10;
end;
用以下例程调用Calculate函数:
Number:=StrToInt(Edit1.Text);
Calculate(Number);
Edit2.Text:=IntToStr(Number);
Number接受由编辑框1输入的数值,经Calculate过程运算。它是一个数值型实参。在进入Calculate函数后,会把Number实参拷贝给形参CalNo,在过程中CalNo增大十倍,但并未传递出来,因此Number值并未改变,在编辑框2中显示仍然是编辑框1中的输入值。形参和实参占用不同的内存地址,在过程或函数被调用时,将实参的值复制到形参占用的内存中。因此出了过程或函数后,形参和实参的数值是不同的,但实参的值并不发生变化。如果您想改变传入的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字var。例如:procedureCalculate(varCalNo:Integer);
则CalNo并不在内存中占据一个位置,而是指向实参Number。当一个变参被传递时,任何对形参所作的改变会反映到实参中。这是因为两个参数指向同一个地址。将上一个例程中过程头的形参CalNo前面加上var,再以同样的程序调用它,则在第二个编辑框中会显示计算的结果,把第一个编辑框中的数值放大十倍。这时形参CalNo和实参Number的值都是Nnmber初始值的10倍。
如果当过程或函数执行是要求不改变形参的值,最保险的办法是使用常量参数。在参数表的参数名称前加上保留字const可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护您的参数,使您在不想改变参数值时不会意外地将新的值赋给这个参数。
如果你还想了解更多这方面的信息,记得收藏关注本站。