EL表达式向 JS 函数传值

新手上路,请多包涵

EL表达式,向JS内传递参数遇到问题。

传递值类型,加上单引号就可以:

<a class="btn" href="javascript:test('${param.name}');" id="name">姓名</a>

想要传递对象(Map、List等),一直是空值,加上单引号,就是一个类名@hash值的一个字符串。

很纠结,如何向JS内传递对象类型的EL表达式呢?不至于无法实现吧。

阅读 6.4k
1 个回答

1.你传递对象最后要拿到对象里的某个值,可以直接采用获取参数的形式

<a class="btn" href="javascript:test('${map.name}','${map.age}');" id="name">姓名</a>

2.如果你非要传递对象的话,可以先把对象转成JSON字符串,然后在test方法中转成JSON

<a class="btn" href="javascript:test('${mapString}');" id="name">姓名</a>

function test(str) {
    try {
        var obj = JSON.parse(str);
        //TODO
    } catch (e) {
        throw e;
    }
}

3.使用第二种方式有风险,例如你的map中有用户输入的信息,包含引号就会出现HTML解析错误。一般这种情况我是这样处理的

    <a class="btn" href="javascript:void(0)" id="name" data-name="${map.name}" data-age="${map.age}">姓名</a>
    
    $('#name').click(function () {
        var $this = $(this);
        var name = $this.data('name');
        var age = $this.data('age');
    
        //TODO
    
    });
    
    数据过多我会写个方法来获取数据
    
    $('#name').click(function () {
        var $this = $(this);
        var data = seriData($this);
    
        //TODO
    
    });
    
    function seriData(el) {
        return {
            name: el.data('name'),
            age: el.data('age'),
            grade: el.data('grade')
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题