我正在创建一个带有选择下拉列表的表单。其中一个选项是“其他 - 请指定”,它应该显示一个额外的文本字段以获取更多详细信息。
我设法使用onChange事件+一些简单的值检查(因为我不能依赖于该位置)。
我开始测试它并意识到虽然它在使用鼠标时效果很好(在控制失去焦点后运行onChange),但是当我使用键盘时却没有(因为它还没有失去焦点) - 仅按Tab键后,会出现更改(看起来很奇怪)。
在我看来,我错过了一些明显的东西,我寻找其他事件,而我发现的最接近的事情就是onclick,但那也不是。
所以问题是,有没有更好的方法来解决这个问题?
答案 0 :(得分:3)
您只需将其添加到<select>
标记:
onkeyup="this.onchange();"
答案 1 :(得分:2)
的onkeyup =“this.onchange(); 但如果没有变化,keyup事件可能会触发
答案 2 :(得分:1)
This article可能会对您有所帮助。它使用这样的技巧:
// executes an onchange function after 750ms (or specified delay)
function safeOnChange1( code, delay ) {
delay = delay || 750;
window.clearTimeout( soc_id );
soc_id = window.setTimeout( code, delay );
}
// global timer ID for the safeOnChange1 function.
var soc_id = null;
这不是很漂亮,但这是在下拉列表中使用onchange函数的问题。另一个解决方案是一个函数,每隔一段时间检查一次下拉列表的值,如果它发生变化则调用onchange函数。
查找这样的教程:http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html
function addEvent(obj, evType, fn){
if (obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
addEvent(window, 'load', foo);
addEvent(window, 'load', bar);
如果你能查找它还有一种jquery方式
答案 3 :(得分:1)
示例使用angular和jquery,您可以根据需要实现此目的,
$("#mytxt").on('keypress', function() {
console.log($("#mytxt").val())
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.11/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
Angular Example: <input type="text" ng-model="bad" ng-change="badri(bad)"/>
<br/>
jQuery Example: <input type="text" id="mytxt">
</div>
<script>
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.badri = function(v) {
console.log(v)
}
});
</script>
答案 4 :(得分:0)
这是使用“ marcgg”答案的方法(顺便说一句,这是这里唯一的正确答案,也是我在谷歌搜索之前想到的第一个想法):
// executes an onchange function after 750ms (or specified delay)
function safeOnChange1(code, delay) {
delay = delay || 750;
window.clearTimeout(soc_id);
soc_id = window.setTimeout(code, delay);
}
// global timer ID for the safeOnChange1 function.
var soc_id = null;
$('#your-input-element').keyup(function () {
safeOnChange1(function () {
var finalInputValue = $('#your-input-element').val();
if (finalInputValue != "") {
//do the work here
console.log(finalInputValue);
}
}, 1000);
});