我有一个文本框,其中onchange事件在运行时添加了一些元素。因此,提交按钮的位置会发生变化。如果用户在文本框中输入内容并单击按钮,则不会触发onclick事件。我怀疑它是因为同时按钮的位置发生了变化,浏览器认为点击发生在页面而不是按钮上。
我有办法处理这种情况吗?我无法移动在运行时添加的元素上方的按钮。
我创建了一个示例jsfiddle:http://jsfiddle.net/WV3Q8/3/
HTML:
<p>Enter something</p>
<input type="text" id="input" onchange="onChange()">
<div id="log"></div>
<button value="Go" style="display:block" type="button" onclick="submit();" id="btn-submit">Submit</button>
JavaScript的:
function onChange(){
var value = $('#input').val();
$('#log').append('<p>New value: ' + value + '</p>');
}
function submit(){
alert('value submitted');
}
编辑1
测试用例(问题是关于第二个测试用例)它在所有浏览器中发生(Chrome,IE 10等):
编辑2: 我不能使用其他关键事件,如keyup,keydown或keypress,原因很明显(它们会在每个按键上触发)。 setimeout也是不可能的,因为有一些单选按钮是在运行时在textbox的onchange事件上生成的。在没有向用户显示这些单选按钮的情况下点击提交按钮是不明智的。
答案 0 :(得分:1)
Working Fiddle
一种方法是使用onkeypress
<input type="text" id="input" onkeypress="onChange();">
<强>更新强>
如果您可以使用mousedown
事件,那就可以了。
答案 1 :(得分:1)
对于您的编辑#2,您必须使用setTimeout()
方法延迟附加,如下所示:
setTimeout(function(){
$('#log').append('<p>New value: ' + randomVal + '</p>');
},100);
答案 2 :(得分:0)
您在 onChange()
中缺少 return true 语句以下是jsfiddle
上的代码function onChange(){
var randomVal = Math.floor((Math.random()*100)+1);
$('#log').append('<p>New value: ' + randomVal + '</p>');
return true;
}
function submit(){
alert('value submitted');
}
编辑:替代解决方案可能是在submit()中调用onChange()。
答案 3 :(得分:0)
我会将setTimeout
与keyup事件一起使用:
var time;
function onChange() {
clearTimeout(time);
time = setTimeout(function() {
var value = $('#input').val();
$('#log').append('<p>New value: ' + value + '</p>');
}, 200);
}
用户完成输入后会附加文字。
答案 4 :(得分:0)
这不是一个好的解决方案,但您可以像这样触发案例的提交功能:
function onChange(){
var value = $('#input').val();
$('#log').append('<p>New value: ' + value + '</p>');
submit();
}
function submit(){
alert('value submitted');
}