问题传递'这个'进入Javascript函数

时间:2015-02-12 14:39:44

标签: javascript this

这个问题有点困惑。我编写了这个函数来替换输入元素中的标点符号:



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;
&#13;
&#13;

当我在浏览器控制台中以相关ID作为参数手动运行该功能时,它可以工作。当我在函数内部添加行alert(element.id);时,我会收到一个包含正确元素ID的警报。因此,当我使用punctuationReplace调用上述onblur="punctuationReplace(this)"函数时,我很困惑。

我确定有一个简单的解决方案,但不知道它是什么。

5 个答案:

答案 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, '');
}

确实停止使用内联电话!