簡體   English   中英

在不失去焦點的情況下改變?

[英]onchange without losing focus?

我正在創建一個帶有 select 下拉列表的表單。 其中一個選項是“其他 - 請說明”,它應該顯示一個額外的文本字段以獲取更多詳細信息。

我設法使用 onChange 事件 + 一些簡單的值檢查來做到這一點(因為我不能依賴這個位置)。

我開始測試它並意識到雖然它在使用鼠標時運行良好(onChange 在控件失去焦點后運行),但當我使用鍵盤時它不會(因為它還沒有失去焦點) - 只有在我按下選項卡是否出現更改(看起來很奇怪)。

在我看來,我似乎遺漏了一些明顯的東西,我尋找了其他事件,發現的最接近的事件是 onclick,但也不是。

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

您只需將其添加到<select>標記即可:

onkeyup="this.onchange();"

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

本文可能對您有所幫助。 它使用這樣的技巧:

// 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方式

示例使用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> 

這是如何使用'marcgg'回答,(這是BTW中唯一正確的答案,是谷歌搜索之前想到的第一個想法):

        // 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);
    });

您可以改用“輸入”事件:

dropdown.addEventListener("input", () => {alert("CH-CH-CH CHANGES!")})

我在這里做了一個簡單的例子: https://codepen.io/sekmo/full/rNKzedZ

PS:“輸入”事件也是 React 用於 onChange 屬性的事件:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM