Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery插件设置中使用特殊字符?_Javascript_Jquery_String_Encode - Fatal编程技术网

Javascript 在jQuery插件设置中使用特殊字符?

Javascript 在jQuery插件设置中使用特殊字符?,javascript,jquery,string,encode,Javascript,Jquery,String,Encode,我正在开发的插件遇到了问题。我允许用户向插件传递一些文本,如下所示: data-plugin='{ "setting" : "hello world" }' 没有问题,除非引入特殊字符: data-plugin='{ "setting" : "hello world, it's been awhile." }' 撇号只是暂停所有操作,不抛出任何错误。我不确定我将如何允许用户像通常那样键入这些内容 编辑:以下是导致问题的确切属性: data-plugin='{ "foreground":

我正在开发的插件遇到了问题。我允许用户向插件传递一些文本,如下所示:

data-plugin='{ "setting" : "hello world" }'
没有问题,除非引入特殊字符:

data-plugin='{ "setting" : "hello world, it's been awhile." }'
撇号只是暂停所有操作,不抛出任何错误。我不确定我将如何允许用户像通常那样键入这些内容

编辑:以下是导致问题的确切属性:

data-plugin='{
   "foreground":"1_foreground.png", 
   "horizon":"50,120",
   "subtitle":"Hello world. It's been awhile.",
   "subtitle_speed":"3500,2000",
   "subtitle_color":"#ff5b00",
   "subtitle_pos":"bottom"
}'
编辑2:

当设置中使用\'时,在合并插件内的对象之前会记录此设置:

{
       "foreground":"1_foreground.png", 
       "horizon":"50,120",
       "subtitle":"Hello world. \
在这之后,我直接使用$.extend将其合并,然后将其作为数据应用

这是如何设置的:

在大量元素上调用插件:

$('.el').plugin({ "setting1" : "value" });
通过在此处使用这些设置来修改这些设置:

<div class="el"></div>
<div class="el" data-plugin='{ "setting1" : "special value" }'></div>

无论如何,这不是问题所在。问题是试图在值中插入撇号。任何HTML元素上的单引号都是有效的

谢谢

data-plugin='{ "setting" : "hello world, it's been awhile." }'
因为要用撇号包装JSON字符串,所以需要在字符串中转义撇号

将其更改为:

data-plugin='{ "setting" : "hello world, it\'s been awhile." }'
编辑:好的,我想我知道你在做什么,因为数据插件是一个html属性:

我尝试了一个JSFIDLE来复制,下面是我得到的结果:

<input type='hidden' data-plugin='{
   "foreground":"1_foreground.png", 
   "horizon":"50,120",
   "subtitle":"Hello world. It\'s been awhile.",
   "subtitle_speed":"3500,2000",
   "subtitle_color":"#ff5b00",
   "subtitle_pos":"bottom"
}'>
这导致了你在问题中提到的错误

根据对您问题的第一次评论,我将撇号改为
&apos当我运行时

alert($('input').data('plugin'));
我得到了正确的回答。这将向JSON对象发出警报,因此

alert($('input').data('plugin').foreground);
警报“1_foreground.png”。要将其转换回JSON(如果您正试图这样做),您需要:

var jsonPluginSettings = JSON.stringify($('input').data('plugin'));

我需要知道数据是如何保存和写入的,以获得完整的答案,但这会有所帮助:我假设
数据插件='{“设置”:“hello world”}
是一个HTML属性?是的,它是一个HTML属性在生成HTML之前,您必须正确地对所有
'
进行HTML编码。请参阅。html没有生成,但用户会输入以进行插件设置。这是我尝试的第一件事,奇怪的是它没有工作?一旦撇号被转义,它就是一个声音字符串,例如:alert('te'st');vs.alert('te'st')。。。只是确认一下,您没有收到任何控制台错误?如果没有,那么我需要看到更多的代码来诊断插件中发生了什么,以及更多关于发生了什么问题的描述。您是否正在尝试创建一个JSON对象,但它尚未定义?如果在数据插件行之前和之后都添加了一个警报,会发生什么?嘿,Gary,刚刚添加到问题中,以便您可以在上下文中看到它。我很确定,像往常一样逃避它会奏效,但没有运气,也没有控制台错误。我将尝试提醒。无法在主问题上键入此内容,因为我没有50个代表,但我错过了原始问题的一部分,用户将键入此内容。我同意James L的观点。我们需要更多关于数据来自何处以及如何进入您正在使用的JSON字符串的信息。是的,这是“用户”将数据输入表单字段还是“开发人员”将数据属性添加到元素?
var jsonPluginSettings = JSON.stringify($('input').data('plugin'));