【问题标题】:Javascript- How to pass array as parameter at onclick event?Javascript-如何在 onclick 事件中将数组作为参数传递?
【发布时间】:2015-09-07 09:22:37
【问题描述】:

我有一个要传递给 javascript onclick 函数的数组。我在按钮的 onclick 事件中发送该数组。 onclick 函数返回我 [object Object]。有没有其他方法可以用数组调用该函数?

这是我的代码:

var data_type= $.parseJSON(data_playtype[1]);//{"1":"apple","2":"orange","23":"berry","8":"grape","9":"mango"}


str1.push('<td><a href="javascript:void(0)" onClick="showABC(\''+data_type+'\')">'Data'</td>');



function showABC(fruit){

    $.each(fruit,function(pid,pt){
        alert(pt);
    });

}

【问题讨论】:

  • 不要使用 HTML 和内联事件处理程序。使用 jQuery 构建 DOM 元素并绑定事件处理程序,因此您可以使用闭包。我强烈推荐阅读 jQuery 教程:learn.jquery.com/using-jquery-core/manipulating-elements/…, learn.jquery.com/events/event-basics
  • pt 是一个对象,所以当您执行alert(pt) 时,它会将对象字符串化为[object Object]。尝试访问该对象的特定键。
  • @JoshBeam:在构建 HTML 时,字符串转换已经发生。
  • @FelixKling,哦,是的,你是对的。在字符串中谈论onClick,是吗?

标签: javascript jquery arrays


【解决方案1】:

我有一个要传递给 javascript onclick 函数的数组。 我在按钮的 onclick 事件中发送该数组。 onclick 函数返回我[对象对象]。有不同的方法吗 用数组调用那个函数?

注意,data_typejs 上似乎不是Arraydata_type 似乎是 Object


尝试使用 .on() ,在 click 事件处理程序中以 data_type 为参数调用 showABC()

var data_playtype = [];

data_playtype[1] = JSON.stringify({
  "1": "apple",
  "2": "orange",
  "23": "berry",
  "8": "grape",
  "9": "mango"
});

var data_type = $.parseJSON(data_playtype[1]);
//{"1":"apple","2":"orange","23":"berry","8":"grape","9":"mango"}

var str1 = [];
str1.push("<td><a href=javascript:void(0)>Data</a></td>");

function showABC(fruit) {

  $.each(fruit, function(pid, pt) {
    alert(pt);
  });

};

$("table tbody").append(str1).find("a")
  .on("click", function() {
    showABC(data_type)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
  <tbody></tbody>
</table>

【讨论】:

    【解决方案2】:

    DEMO

    使用内联 JS 不是一个好主意。我会使用数据属性来保存数据,如下所示:

    var data_type = .....;
    var link = $('<a/>').data('data_type', data_type).html('Data');
    str1.push( $('<td/>').html( link ) );
    
    //event handler
    link.on('click', function(e) {
        e.preventDefault();
        var data_type = $(this).data('data_type');
        .....
    });
    

    参考:https://api.jquery.com/data/

    .data(key, value)

    类型:字符串 一个字符串,命名要设置的数据。

    价值

    类型:随便 新的数据值;这可以是除 undefined 之外的任何 Javascript 类型。

    【讨论】:

    • 在传递给data时,jQuery 是否会自动将对象转换为 JSON?
    • @FelixKling,你到底是什么意思?你有什么顾虑?
    • 没关系,我被“数据属性”弄糊涂了。忘了 jQuery 有自己的数据存储。
    • 但你确实提出了一个好观点。没有向元素添加实际的数据属性。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多