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