在具有特殊字符的参数列表后获取错误Uncaught SyntaxError:缺少)

时间:2019-04-05 07:31:27

标签: javascript html

尝试调用javascript onkeyup函数时收到错误消息。请让我知道如何解决此问题

<input type="text" name="dt" onkeyup="test('345*$kl&#39;g%-?$^gh546tyu*$5670&/>*$gd&#39;4563')" />


function test(kw) {
  var arr = kw.split("*$");
  for (i = 0; i < arr.length; i++) 
    console.log("dt=" + arr[i]);
}

想要基于'* $'分割字符串

4 个答案:

答案 0 :(得分:1)

嘿,在HTML中调用函数时,您会丢失一些东西!您的HTML格式应如下:

<input type="text" name="dt" onkeyup='test("345*$kl&#39;g%-?$^gh546tyu*$5670&*$gd&#39;4563")' />

干杯!

答案 1 :(得分:1)

您正在将JavaScript嵌套在HTML内,并且转义了HTML而不是JavaScript的字符。

在以"分隔的HMTL属性中,您需要将"个字符转义为&quot;

在用'分隔的JavaScript字符串中,您需要将'字符转义为\'

onkeyup="test('345*$kl&#39;g%-?$^gh546tyu*$5670&/>*$gd&#39;4563')"
                      ▲▲▲▲                            ▲▲▲▲

在这里,您以'的身分转过#39;,因此HTML解析器将其转换为',然后发送:

test('345*$kl'g%-?$^gh546tyu*$5670&/>*$gd'4563')

…到JavaScript解析器…,它尽早结束了字符串文字。

将其更改为:

onkeyup="test('345*$kl\'g%-?$^gh546tyu*$5670&/>*$gd\'4563')"

更好的是,首先不要将JavaScript嵌入HTML。

您可以改为执行以下操作:

function test(event) {
  var kw = event.currentTarget.dataset.string;
  var arr = kw.split("*$");
  for (i = 0; i < arr.length; i++) 
    console.log("dt=" + arr[i]);
}

document.querySelector('input').addEventListener('keyup', test)
<input type="text" name="dt" data-string="345*$kl&#39;g%-?$^gh546tyu*$5670&/>*$gd&#39;4563">

答案 2 :(得分:0)

在测试方法调用

的外面使用单引号”,在内部使用双引号”。

代码发生的事情是,您使用过345*$kl&#39;g%-$^gh546tyu*$5670&/>*$gd&#39;4563的字符串中的/>,因此它被视为onkeyup方法调用的结束标记。

 <input type='text' name='dt' onkeyup='test("345*$kl&#39;g%-$^gh546tyu*$5670&/>*$gd&#39;4563")' />

function test(kw) {
var arr = kw.split("*$");
for (i = 0; i < arr.length; i++) 
console.log("dt=" + arr[i]);
}

运行后,我在控制台中得到了此输出

dt=345 dt=kl'g%-?$^gh546tyu dt=5670&/> dt=gd'4563

答案 3 :(得分:-1)

您正在Javascript函数内使用固定字符串,因此可以将字符串直接插入Javascript函数本身内。可能您不希望这样做,但是您试图解析用户插入的输入。我的意思是,像这样:

<input type="text" id="dt" onkeyup="test()">


<script>
function test() {
  var x = document.getElementById("dt");
  var arr = x.value.split("*$");
  for (i = 0; i < arr.length; i++) 
   console.log("dt=" + arr[i]);
}
</script>