首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不分散注意力的情况下进行更改?

在不分散注意力的情况下进行更改?
EN

Stack Overflow用户
提问于 2009-09-02 15:43:00
回答 4查看 16.2K关注 0票数 14

我正在创建一个带有select下拉列表的表单。其中一个选项是"other - more“,它会显示一个额外的文本字段来显示更多详细信息。

我设法使用onChange事件+一些简单的值检查来做到这一点(因为我不能依赖位置)。

我开始测试它,并意识到虽然它在使用鼠标时运行得很好(onChange是在控件失去焦点后运行的),但当我使用键盘时它却不能(因为它还没有失去焦点)-只有在我按Tab键之后,变化才会出现(看起来很奇怪)。

在我看来,我似乎错过了一些明显的东西,我寻找了其他事件,我找到的最接近的事件是onclick,但也不是这样。

所以问题是,有没有更好的方法来解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2010-11-30 19:51:33

您可以简单地将此代码添加到<select>标记:

代码语言:javascript
复制
onkeyup="this.onchange();"
票数 10
EN

Stack Overflow用户

发布于 2009-09-02 15:50:06

This article可能会对您有所帮助。它使用的技巧如下:

代码语言:javascript
复制
// 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;

这并不美观,但这就是在dropdown上使用onchange函数的问题所在。另一种解决方案是一个函数,它每隔一段时间检查一次dropdown的值,如果值改变了,就调用onchange函数。

像这样查找教程:http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html

代码语言:javascript
复制
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方法,如果你能找到它的话

票数 2
EN

Stack Overflow用户

发布于 2017-07-28 20:30:57

示例使用angular和jquery你可以随心所欲地实现这一点,

代码语言:javascript
复制
$("#mytxt").on('keypress', function() {
  console.log($("#mytxt").val())
})
代码语言:javascript
复制
<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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1368487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档