将数组传递给 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 07:14:56  来源:igfitidea点击:

Passing an array to a javascript onclick function

javascriptjquery

提问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();
};