2013-11-23 39 views
0
<!DOCTYPE html> <!-- HTML5 --> 
<html> 
<head> 
<meta charset="UTF-8"> 
</head> 

<body> 
<p><button type="button" onclick="show()">Show new name</button></p> 
<p>Name: <input type="text" onchange="changed()" id ="nm" name="FirstName" value="Mickey"></p> 
<p>New name: <span id="sh" ></span></p> 

<script> 
function show() 
{ 
    var elem = document.getElementById("nm"); 
    name = elem.value; 
    document.getElementById("sh").innerHTML = name; 
} 
function changed() 
{ 
    alert("Name changed"); 
} 
</script> 
</body> 
</html> 

如果在一个新名称的用户的类型,改变焦点,然后点击按预期显示新名称的按钮。 但是,如果用户更改名称,然后单击该按钮而不更改焦点,则不会显示新名称。 这是为什么?在我的代码中有几个输入,我想在每次更改时处理每个输入,然后在点击按钮时再执行一些操作。问题在于,除非用户首先进行非直观的鼠标点击或按下“输入”,否则无法识别按钮点击。有没有办法获得理想的行为?是否可以在onchange事件之后立即检测onclick事件?

+0

请千万不要用内嵌JavaScript(在你的HTML:的onclick,平变化)。这从来不是一个好的做法。 – m59

+0

@ m59我明白了。我的目的是用简单的方式来解决这个问题。 – user2662157

回答

0

我不完全得到你想要达到的。但是,如果你只是想按一下按钮具有焦点仍然在输入之后被改名字,只是改变你的“平变化”函数来显示()

<p><button type="button" onclick="show()">Show new name</button></p> 
<p>Name: <input type="text" onchange="show()" id ="nm" name="FirstName" value="Mickey"></p> 
<p>New name: <span id="sh" ></span></p> 

example Fiddle

而作为M59指出,内联JavaScript从来不是一种好的做法。

+0

我希望能够在不每次调用“show()”的情况下更改多个输入,然后在用户在最后一次输入中输入后单击按钮时调用“show()”(但不需要额外输入鼠标点击或按“确认”点击按钮前刚刚失去焦点。 – user2662157

0

onchange事件发生时元素的值已更改,并且onclick事件发生在用户单击某个元素时。

我建议你使用onblur event.Try这样的:

<p>Name: <input type="text" onblur="changed()" id ="nm" name="FirstName" value="Mickey"></p> 

当一个对象失去焦点时发生的onblur事件。

入住这里:Demo

2

你这里的问题是警惕。

在元素上检测到一个鼠标按下和一个鼠标松开click事件触发。

当你按下按钮鼠标按下点火,输入,触发onchange事件的模糊。但它增加了一个警告(在你的光标和按钮之间,所以mouseup从不会触发按钮,也不会点击按钮)。

为了避免这种情况,您可以:

  • 删除警报(和所有将被罚款工作)
  • 注册onmousedown事件上的按钮,而不是的onclick。
+0

“按钮注册onmousedown事件,而不是的onclick” – user2662157

+0

“按钮注册onmousedown事件,而不是的onclick”这是辉煌,不正是我想要什么。 谢谢。 – user2662157

相关问题