使用冒号、分号等符号将变量传递给 javascript 函数

Posted

技术标签:

【中文标题】使用冒号、分号等符号将变量传递给 javascript 函数【英文标题】:Passing variable to javascript function with symbols like colon, semicolon, etc 【发布时间】:2015-12-26 09:54:33 【问题描述】:

目前,我对当前功能的这种情况有所了解。

基本上,这个 ajax 调用会生成表情符号列表,但是我希望当用户点击笑脸图像时,笑脸代码将添加到消息文本框中。

例如,当用户点击微笑图像时,:-) 代码将添加到消息框中。 我的问题是,是否可以将代码 :-) 传递给函数?

在我当前的代码中,addText(' + key + ') 不起作用。 key 的值为:-)。错误为Uncaught SyntaxError: Unexpected token : 当值为;) 时,错误为Uncaught SyntaxError: Unexpected token ; 我也有:lol: 等类似的代码。任何帮助将不胜感激。

$.ajax(
    type: "POST",
    async: true,
    cache: false,
    dataType: "json",
    url: "./assets/php/scripts.php",
    data: command: 'get-smileys',
    success: function (data) 
        $("#smileys").empty();
        $("#smileys").append("<br>");
        var div_obj = document.createElement("ul");
        $(div_obj).addClass('list-inline');
        $.each(data, function(key, value) 
            $(div_obj).append('<li><div class="col-xs-1 col-sm-1 col-lg-1" style="width:110px; height:80px" align="center"><img src="assets/img/smileys/' + value[0] + '" title="' + value[1] + '" onclick="addText(' + key + ');"><br>' + key + '</div></li>')
            $("#smileys").append($(div_obj)); 
        );
        $("#smileys-flag").text('1');
        $("#loader-chat").hide();
    
);

这是添加文本部分的功能:

function addText(text)
    var fullMessage = $("#message").val();
    $("#message").val(fullMessage + text);

【问题讨论】:

将它们作为字符串添加"" 类似这个 alert(":)") 或者按照下面的回答 @Pekka 我尝试将"" 添加到我的代码addText("' + key + '"),现在错误是Uncaught SyntaxError: Unexpected token 【参考方案1】:

问题是您需要将它们作为字符串文字传递,如下所示。

'" onclick="addText(\'' + key + '\');"><br>'

但更好的解决方案是使用 jQuery 事件处理程序而不是像这样的内联事件处理程序

$(div_obj).append('<li><div class="col-xs-1 col-sm-1 col-lg-1" style="width:110px; height:80px" align="center"><img class="smileys" src="assets/img/smileys/' + value[0] + '" title="' + value[1] + '" data-smiley="' + key + '"><br>' + key + '</div></li>')

然后

jQuery(function ($) 
    $("#smileys").on('click', '.smileys', function () 
        addText($(this).data('smiley'))
    );
)

【讨论】:

感谢您,您的第一个解决方案非常完美!我更新了上面的定义,如何在更新的定义上应用 jQuery 事件处理程序?我对 jQuery 事件处理程序了解不多 @LeViNcE 只需进行答案第二部分中建议的更改...更新上面给出的每个循环内容 万岁!!!代码工作正常,非常感谢!顺便说一句,如果你介意,我怎样才能在光标位置插入这些代码?每次我点击笑脸时,代码都会附加在文本的最后一部分,我想把它放在光标位置吗?可能吗?谢谢 文本框上的光标位置,当我点击笑脸时,我当前的代码甚至光标位置都在文本框的开头,代码;-)示例插入到最后部分附加当前文本 @LeViNcE 看看***.com/questions/1064089/… 或***.com/questions/11076975/…【参考方案2】:

您需要将参数作为字符串文字传递。然后当你解码它时,你可以得到你想要的子字符串。

例如:

function takeSmiley(smiley) 
  return smiley.substr(1, smiley.length - 2) // Return lol for :lol:


takeSmiley(":lol:");

【讨论】:

以上是关于使用冒号、分号等符号将变量传递给 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

Python里面语句结束是用冒号吗?

linux Makefile configure里面 += := -= 这些符号的意思?

Java关键字及符号使用

基础知识 --Matlab中特殊符号使用总结

将带有美元符号 ($) 的变量与 facet_grid() 或 facet_wrap() 组合传递给 aes() 时出现问题

将文字百分号传递给 QuerySet.extra()