尝试调用javascript onkeyup函数时收到错误消息。请让我知道如何解决此问题
<input type="text" name="dt" onkeyup="test('345*$kl'g%-?$^gh546tyu*$5670&/>*$gd'4563')" />
function test(kw) {
var arr = kw.split("*$");
for (i = 0; i < arr.length; i++)
console.log("dt=" + arr[i]);
}
想要基于'* $'分割字符串
答案 0 :(得分:1)
嘿,在HTML中调用函数时,您会丢失一些东西!您的HTML格式应如下:
<input type="text" name="dt" onkeyup='test("345*$kl'g%-?$^gh546tyu*$5670&*$gd'4563")' />
干杯!
答案 1 :(得分:1)
您正在将JavaScript嵌套在HTML内,并且转义了HTML而不是JavaScript的字符。
在以"
分隔的HMTL属性中,您需要将"
个字符转义为"
。
在用'
分隔的JavaScript字符串中,您需要将'
字符转义为\'
。
onkeyup="test('345*$kl'g%-?$^gh546tyu*$5670&/>*$gd'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'g%-?$^gh546tyu*$5670&/>*$gd'4563">
答案 2 :(得分:0)
在测试方法调用
的外面使用单引号”,在内部使用双引号”。代码发生的事情是,您使用过345*$kl'g%-$^gh546tyu*$5670&/>*$gd'4563
的字符串中的/>
,因此它被视为onkeyup方法调用的结束标记。
<input type='text' name='dt' onkeyup='test("345*$kl'g%-$^gh546tyu*$5670&/>*$gd'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>