onChange事件没有触发。

5
我使用的是Internet Explorer 8和Sharepoint 2007。
简介:我有一个包含来自列表的各个字段的NewForm。 我需要使用javascript从其中一个字段中获取用户输入的值(在textBox中),并在同一页面上将其粘贴到其他字段(另一个textBox)中,使用onChange。
问题:我是一个JavaScript新手,我无法设置事件“onChange”来触发我的函数,或者至少触发“alert(”Test“)……或者我正在做错,并不知道为什么(更可能)......
让我们假设我想要使用的字段具有FieldName =“IDTeam”,type =“text”和id =“id_TeamField”。
//My JS below "PlaceHolderMain"

_spBodyOnLoadFunctionNames.push("setTxtBoxesValues");

function setTxtBoxesValues()
{    
   //snipped

   getField('text','IDTeam').onChange = function(){alert('Test')}; 
   //"getField('text', 'IDTeam).onChange = function(){myFunction()};" 
   //If I want to call myFunction() when onChange event is triggered    
    }

此外,尝试使用以下方法替换getField方法:
document.getElementById('id_TeamField').onChange = function(){alert('Test')};

当onChange事件被触发时,若要调用myFunction(),你有什么想法?

我做错了什么?

4个回答

11

onchange是一个事件,因此您可以像这样将其放在标记中:

<input type="text" id="IDTeam" onchange="(call function here)" />

或者你可以将 addEventListener 应用到该 DOM 对象:

document.getElementById("IDTeam").addEventListener("change", function() {//call function here});

在IE6中,您可能需要:(不确定是否有效,因为现在很少有人使用ie6)

document.getElementById("IDTeam").attachEvent("onchange", function() {//call function here} )

之前尝试过“将其放入标签中”的方法(最近又试了一次以防万一),但仍然无效。不知道是否有帮助,但现在看来...它说“在IE 6.0中,'onchange'属性是不被允许的”。 - Mayer M
@MayerM 如果你还在使用IE6,你应该指出来。它非常糟糕。请看我上面的编辑。 - NSF
抱歉,我不知道...我在IE 8上运行它,但在Designer 2007中,它说“次要方案:IE 6.0”(我刚看到:S)...仍然没有任何变化 :/ 不过还是谢谢 :) - Mayer M
@MayerM 简单的示例在这里:http://jsfiddle.net/mxRtB/ 当输入框改变并失去焦点(点击外部)时,会弹出警告提示。 - NSF
你介意用addEventListener或attachEvent写一个例子吗?在JsFiddle中,标签上的写作很好,但我尝试使用JavaScript(如您所示),但没有起作用。不知道我是否搞错了什么,还是只有我的浏览器有问题(它说“对象不支持此属性或方法”)。 - Mayer M
显示剩余3条评论

2

请执行以下步骤:

window.onload = function() { 
    document.getElementById('id_TeamField').addEventListener('change', function() {
        alert('test');
    });
};

或者使用jQuery:

$('#id_TeamField').on('change', function() {
    alert('test');
});

谢谢您的快速回复 :) 不幸的是,它没有起作用 :/(仍然不起作用)。 - Mayer M
1
@MayerM - 是的,它可以:http://jsfiddle.net/kE4CV/。直到输入框失去焦点,onchange事件才会触发。 - PitaJ
我相信您已经测试过并且成功了...但这对我来说却没有用(两种解决方案都没有用)。也许是我的设计师上有什么问题(某些配置)? 我向NSF提到我刚刚注意到,在页面编辑器选项中,它显示“辅助方案:IE 6.0”,尽管我在IE8中运行该页面。 - Mayer M
1
尝试在该页面中(jsfiddle.net/kE4CV)运行,但是没有成功。它显示“页面错误”。当我检查错误时,它说-> 错误详细信息Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)日期:2012年6月11日星期一15:01:44 UTC消息:对象不支持此属性或方法行:20字符:1代码:0 URI:链接 PS:第20行是这一行'document.getElementById('id_TeamField').addEventListener('change', function() { alert('test'); }); - Mayer M

0

这可能有点重复,因为其他人已经说过了,但我还是想分享一下,因为它更加直接:

const select = document.getElementById('select')
const newText = document.getElementById('newText')

select.addEventListener("change", e => {
  console.log(e.target.value)
  newText.value = e.target.value
})
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <select id="select">
    <option value="url1">tool_ver1</option>
    <option value="url2">tool_ver2</option>
    <option value="url2" selected >tool_ver3</option>
  </select>
  <button type="submit">Retrieve New Release App Options</button>
<div class="textInput spacer">
  <h2>New Release App Options</h2>
  <textarea id="newText"></textarea>
</div>
  
  
</body>
</html>


0
你可以通过:

添加事件监听器

来完成这个任务。
document.getElementById('id_TeamField').addEventListener('change', function(){alert('test');});

或者

将onChange添加到标签中

<select onChange='function() { alert('test');}' name='IDTeam' id='id_TeamField' >
   <option>option1</option>
   <option>option2</option>
   <option>option3</option>
</select>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接