如何在锚标记内的js函数调用中传递参数?

时间:2018-04-23 15:17:07

标签: javascript jquery html ajax

这是我的ajax电话:

args

在$ online.append()里面,当我用任何参数调用chatuser()函数时,它返回语法错误。请建议我如何在这种情况下传递参数。

2 个答案:

答案 0 :(得分:0)

我做了一个快速测试,这样做很好。检查我的代码段。主要问题是您传递的用户名没有引号(javascript会将其解释为变量)。

$(document).ready(function() {
	
  /**
   * Dummy data
   */

  var data = [
    { user : 'User 1' },
    { user : 'User 2' }
  ];

  /**
   * Dummy chat user function
   * @param user
   * @param index
   */

  function chatuser(user, index) {
    console.log(user, data[index]);
  }
  
  // Variables
  var j   = 0,
      len = data.length,
      ul  = $('.placeholder');
      
  while(j < len) {
    if(data[j].user) {
      ul.append(jQuery("<li><a href=\"javascript:chatuser('" + data[j].user + "', "+j+");\">" + data[j].user + "</a></li>")); // Pass the user as a string and the current index in the array
    }
    j++;
  }
	
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="placeholder"></ul>

我不知道为什么链接中的函数调用没有在代码片段中调用,但代码工作正常。

答案 1 :(得分:0)

这里有很多变化。最重要的是:

  • 使用var声明您的data变量,使其不会泄漏到全局(窗口)对象上。

  • 通过在成功处理程序中创建一个保留data数组的函数,使用closures的概念。即使在success函数退出后,此函数仍将继续访问您的数组。

  • 预处理data数组以删除不需要的内容并删除不必要的数据。你的循环运行得更快,你的闭包变量也不会消耗尽可能多的内存。

  • 不要使用字符串构建DOM对象。它很混乱,当你忘记逃避特殊字符时会导致很多错误。相反,使用jQuery的textattr函数来为您处理所有这些。

  • 摆脱while循环。当你在数组中内置了一个非常方便的forEach函数时,它是不必要的(它还会删除你首先不需要的额外变量)。

以下是示例代码:

$.ajax({                                      
    url: 'UserList.jsp',                 
    success: function(val){
        var data = JSON.parse(JSON.stringify(val));
        if ($.isArray(data)){
            // Filter the data array and stip it down to only the data we need
            data = data
                .filter(function(item){ return ( item && item.user ) ? true : false; })
                .map(function(item){ return { user: item.user }; });
        } else {
            data = [];
        }
        data.forEach(function(item){
            $("<a>")
                .text(item.user)
                .click(function(){
                    chatuser(item.user);
                })
                .appendTo($online);
            j++;
        });
    },
    error:function(val){
        alert('fail');
    }
});