这个问题有点困惑。我编写了这个函数来替换输入元素中的标点符号:
function punctuationReplace(element){
var elementToChange = document.getElementById(element);
elementToChange.value = elementToChange.value.replace(/\"/g, '');
elementToChange.value = elementToChange.value.replace(/\'/g, '');
elementToChange.value = elementToChange.value.replace(/&/g, 'and');
elementToChange.value = elementToChange.value.replace(/</g, '');
elementToChange.value = elementToChange.value.replace(/>/g, '');
}
&#13;
<input type="text" id="IPR_FNM1" name="IPR_FNM1" value="" maxlength="30" size="31" placeholder="Forename 1" onblur="punctuationReplace(this)"/>
&#13;
当我在浏览器控制台中以相关ID作为参数手动运行该功能时,它可以工作。当我在函数内部添加行alert(element.id);
时,我会收到一个包含正确元素ID的警报。因此,当我使用punctuationReplace
调用上述onblur="punctuationReplace(this)"
函数时,我很困惑。
我确定有一个简单的解决方案,但不知道它是什么。
答案 0 :(得分:3)
停止使用内联事件处理程序,问题解决了
document.getElementById('IPR_FNM1').addEventListener('blur', punctuationReplace, false);
function punctuationReplace(){
this.value = this.value.replace(/("|'|<|>)/g, '').replace(/&/g, 'and')
}
答案 1 :(得分:3)
this
是对DOM元素的引用。它不是包含ID的字符串。
您正尝试将其用作getElementById
的参数,但当它被字符串化("[Object object]"
)时,文档中没有匹配ID,因此您获得{{1} }。
你已经拥有了这个元素。您不需要在DOM中搜索它。
删除行null
并将其他引用更改为var elementToChange = document.getElementById(element);
。
答案 2 :(得分:3)
如果您以这种方式传递this
,那么您已经拥有该元素的引用,因此无需致电getElementById
。
function punctuationReplace(element){
var elementToChange = element; //document.getElementById(element);
elementToChange.value = elementToChange.value.replace(/\"/g, '');
elementToChange.value = elementToChange.value.replace(/\'/g, '');
elementToChange.value = elementToChange.value.replace(/&/g, 'and');
elementToChange.value = elementToChange.value.replace(/</g, '');
elementToChange.value = elementToChange.value.replace(/>/g, '');
}
答案 3 :(得分:0)
this
已经有了你想要的元素的引用。您无需使用getElementById再次获取它。把它直接放到你的变量上:
var elementToChange = element;
答案 4 :(得分:0)
您不需要创建var
,只需继续使用element
即可。像这样:
http://jsfiddle.net/0xuf64zb/1
function punctuationReplace(element){
element.value = element.value.replace(/\"/g, '');
element.value = element.value.replace(/\'/g, '');
element.value = element.value.replace(/&/g, 'and');
element.value = element.value.replace(/</g, '');
element.value = element.value.replace(/>/g, '');
}
确实停止使用内联电话!