将数组传递给 javascript onclick 函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9624620/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Passing an array to a javascript onclick function
提问by user823527
I have an array that I want to pass to a javascript onclick function.
我有一个要传递给 javascript onclick 函数的数组。
var event_data = new Array();
event_data.push(event_id);
event_data.push(event_title);
event_data.push(channel_id);
event_data.push(channel_name);
event_data.push(channel_onclick);
event_data.push(event_site);
event_data.push(event_url);
event_data.push(event_onclick);
event_data.push(start_date);
event_data.push(start_time);
event_data.push(end_date);
event_data.push(end_time);
event_data.push(event_notes);
I send that array in the onclick event of a button.
我在按钮的 onclick 事件中发送该数组。
var span_string = '<span id=\"dt'+event_id+'\">'+print_span+'<br/><button href="#" onclick="edit_event('+event_data+');" style="width: 49px;">Edit</button><button href="#" onclick="delete_event();" style="width: 49px;">Delete</button></span>';
var event_id_string = 'mn'+event_id;
$('#'+event_id_string).append(span_string);
The onclick function isn't called at all with that code. Is there a different way to do call that function with the event_data array?
使用该代码根本不会调用 onclick 函数。有没有其他方法可以使用 event_data 数组调用该函数?
function edit_event (event_data) {
/* function edit_event () { */
alert ('edit event');
var event_id = event_data[0];
var event_title = event_data[1];
var channel_id = event_data[2];
var channel_name = event_data[3];
var channel_onclick = event_data[4];
var event_site = event_data[5];
var event_url = event_data[6];
var event_onclick = event_data[7];
var start_date = event_data[8];
var start_time = event_data[9];
var end_date = event_data[10];
var end_time = event_data[11];
var event_notes = event_data[12];
var alert_string = 'event id '+event_id+'<br/>'+
'event title '+event_title+'<br/>'+
'channel id '+channel_id+'<br/>'+
'channel name '+channel_name+'<br/>'+
'channel onclick '+channel_onclick+'<br/>'+
'event site '+event_site+'<br/>'+
'event url '+event_url+'<br/>'+
'event onclick '+event_onclick+'<br/>'+
'start date '+start_date+'<br/>'+
'start time '+start_time+'<br/>'+
'end date '+end_date+'<br/>'+
'end time '+end_time+'<br/>'+
'notes '+event_notes+'<br/>';
alert (alert_string);
}
回答by Shawn Steward
You're passing it in as a string with single quotes, you should be passing it as the object.
您将它作为带单引号的字符串传递,您应该将它作为对象传递。
onclick="edit_event(event_data);"
回答by Gabe
I see you're using jQuery, you could do it something like this:
我看到你在使用 jQuery,你可以这样做:
Html
html
<span id="mySpan">Stuff</span>
JS
JS
$('#mySpan').click(function(){
edit_event(event_data);
});
回答by user823527
I ended up with this approach.
我最终采用了这种方法。
Make events data a global variable.
使事件数据成为全局变量。
var events_data;
Pass event_id to the edit_event() function.
将 event_id 传递给 edit_event() 函数。
var span_string = '<span id=\"dt'+event_id+'\">'+print_span+'<br/><button href="#" onclick="edit_event(\''+event_id+'\');" style="width: 49px;">Edit</button><button href="#" onclick="delete_event();" style="width: 49px;">Delete</button></span>';
Get event data for selected event_id in the edit_event function.
在 edit_event 函数中获取所选 event_id 的事件数据。
function edit_event (event_id) {
for ( var i=0; i<events_data.event_id.length; i++ ) {
var site = "";
var onclick = "";
if ( event_id == events_data.event_id[i]["0"] ) {
.
.
.
}
}
}
回答by MackMon
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>json pass</title>
<script type="text/javascript" src="ga/jquery.min.js"></script>
<script type="text/javascript">
var mydata = [{
newsid: '10001',
sectionName : 'SLIDESHOW',
title : 'The picture of slide show..',
slideShow : true,
slideShowID : [
"image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.jpg",
"gallery-1.jpg", "gallery-2.jpg", "gallery-3.jpg", "gallery-4.jpg", "gallery-5.jpg", "gallery-6.jpg", "gallery-7.jpg"
],
level : 0
}];
function testMyFn(fnData)
{
$.each(fnData, function (key, value) {
alert(value);
});
}
$(function(){
$('#myFnDiv').html("<a href='#' onclick='testMyFn(mydata[0].slideShowID);' >Get Test fn</a>")
});
</script>
</head>
<body>
<div id="myFnDiv">dsd</div>
</body>
</html>
回答by kand
You usually don't want to specify events in your html. Instead, assign a click event:
您通常不想在 html 中指定事件。相反,分配一个点击事件:
var event_data = ...;
$('#dt' +event_id).click(function(e){
// put your click logic here
// now you can access your array here by closure
event_data.doSomething();
};