是javascript的新手,只是开始学习。这里我有一个javascript来计算字符。
的Javascript
function CheckFieldLength(fn,wn,rn,mc) {
var len = fn.value.length;
if (len > mc) {
fn.value = fn.value.substring(0,mc);
len = mc;
}
document.getElementById(wn).innerHTML = len;
document.getElementById(rn).innerHTML = mc - len;
}
和 HTML
<textarea name="taMessage" id="taMessage" cols="40" rows="5" onkeyup="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);" onkeydown="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);" onmouseout="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);"></textarea>
<br>
<small><span id="charcount">0</span> characters entered. | <span id="remaining">20</span> characters remaining.</small><br>
出于某种原因,这对JsFiddle不起作用,但它正在我的笔记本电脑上工作,否则我也会提出一个小提琴。但这不是我的问题(虽然很想知道原因)。
问题:文本框的ID为= taMessage
,但如果我将ID更改为= ta-Message
,则添加连字符,脚本将停止工作。用下面的代码替换上面的html脚本会停止javascript,唯一的区别就是连字符。为什么呢?
<textarea name="taMessage" id="ta-Message" cols="40" rows="5" onkeyup="CheckFieldLength(ta-Message, 'charcount', 'remaining', 20);" onkeydown="CheckFieldLength(ta-Message, 'charcount', 'remaining', 20);" onmouseout="CheckFieldLength(ta-Message, 'charcount', 'remaining', 20);"></textarea>
答案 0 :(得分:4)
问题:文本框的id是= taMessage但是如果我更改了id to = ta-Message,添加连字符,脚本停止工作。
因为连字符在Javascript中的变量名中无效。
全局密钥已添加到window
对象,当您执行onkeyup="CheckFieldLength(taMessage,...);"
时,值taMessage
实际为window.taMessage
,也可以window["taMessage"]
进行访问。< / p>
hypen -
作为id
有效,但在Javascript中不是有效的变量名称,它也不能用.
符号来访问密钥。但是,keys
对象支持连字符,因此在您的情况下,key
为fa-Message
。您可以使用括号表示法与父window
一起访问带连字符的键,例如window['ta-Message']
onkeyup="CheckFieldLength(ta-Message, 'charcount', 'remaining', 20);//Wrong
onkeyup="CheckFieldLength(window.ta-Message, 'charcount', 'remaining', 20);//Wrong
onkeyup="CheckFieldLength(window['ta-Message'], 'charcount', 'remaining', 20);//works
function log(node){
console.log("node", node);
}
<textarea id="hyphenated-id" onclick="log(window['hyphenated-id'])"></textarea>
正如其他评论所述,在您的方案中使用this
是更好的选择
function log(node){
console.log("node", node);
}
<textarea id="hyphenated-id" onclick="log(this)"></textarea>
更好的是使用EventListeners绑定事件。
答案 1 :(得分:0)
这种情况可能会this
关键字有所帮助,例如
<textarea name="taMessage" id="ta-Message" cols="40" rows="5" onkeyup="CheckFieldLength(this.id, 'charcount', 'remaining', 20);" onkeydown="CheckFieldLength(this.id, 'charcount', 'remaining', 20);" onmouseout="CheckFieldLength(this.id, 'charcount', 'remaining', 20);"></textarea>
您可以在HTML代码中传递this.id
或this.name
您使用的任何属性。
我希望这个简单的技巧可以帮助你。
答案 2 :(得分:0)
您无法在元素ID或名称中传递空格字符。 您也可以使用此来获取此类
的当前文本框onkeydown="CheckFieldLength(this, 'charcount', 'remaining', 20);"
你也可以将id name作为字符串传递,你的函数代码就像这样
function CheckFieldLength(fn,wn,rn,mc) { fn = window[fn];}
它可以通过id找到元素