2009-09-02 52 views
9

我使用select下拉菜單創建表單。其中一個選項是「其他 - 請指定」,它應該顯示額外的文本字段以獲取更多詳細信息。onchange不失焦點?

我設法使用onChange事件+一些簡單的值檢查(因爲我不能依靠位置)。

我開始測試它,並意識到,雖然它使用鼠標時完美(onChange在控件失去焦點後運行),但它不會在我使用鍵盤時(因爲它沒有失去焦點) - 只有當我按下標籤後纔會出現變化(這看起來很奇怪)。

在我看來,我錯過了一些明顯的事情,我尋找其他事件,而我發現的最接近的是onclick,但那也不是。

所以問題是,有沒有更好的解決方法?

回答

0

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

您可以簡單地將其添加到<select>標籤:

onkeyup="this.onchange();" 
2

onkeyup =「this.onchange(); 但如果沒有變化,則可能觸發keyup事件

1

實例使用的角度和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>