Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当元素被启用/禁用时触发函数_Javascript_Jquery_Html_Twitter Bootstrap_Knockout.js - Fatal编程技术网

Javascript 当元素被启用/禁用时触发函数

Javascript 当元素被启用/禁用时触发函数,javascript,jquery,html,twitter-bootstrap,knockout.js,Javascript,Jquery,Html,Twitter Bootstrap,Knockout.js,这似乎是一件相对简单的事情,但我在任何地方都找不到关于如何做到这一点的任何东西。我有一个模式,在等待异步数据时以禁用的输入打开。我想知道何时该输入被启用,以便我可以集中输入。这就是我想要实现的。将其视为全局模式打开处理程序: $('.modal').on('shown.bs.modal', function (event) { var textInput = $(event.target).find('input[type=text]:visible').first(); if

这似乎是一件相对简单的事情,但我在任何地方都找不到关于如何做到这一点的任何东西。我有一个模式,在等待异步数据时以禁用的输入打开。我想知道何时该输入被启用,以便我可以集中输入。这就是我想要实现的。将其视为全局模式打开处理程序:

$('.modal').on('shown.bs.modal', function (event) {
    var textInput = $(event.target).find('input[type=text]:visible').first();
    if (textInput.is(':disabled'))
    {
        textInput.on('<<<<<enabled>>>>>', function(){
            textInput.off('<<<<<enabled>>>>>');
            textInput.focus();
        });
    }
    else
    {
        textInput.focus();
    }
});
$('.modal').on('show.bs.modal',函数(事件){
var textInput=$(event.target).find('input[type=text]:visible').first();
if(textInput.is(':disabled'))
{
textInput.on(“”,函数(){
textInput.off(“”);
textInput.focus();
});
}
其他的
{
textInput.focus();
}
});
输入变为启用/禁用时是否没有触发的事件

<input type="text" class="form-control txtUserSearch" data-bind="value: userFilter, event: { keyup: FilterUsers }, enable: AvailableUsers().length > 0">


如果有用户在异步请求中返回,它将被启用。

我曾经有一个项目,但我失去了这样做的动机。 我寻找了一种做这类事情的方法,我发现
MutationObserver
应该是一种很好的方法

看一看:

也许还有:


我希望我正确理解了你的问题

不幸的是,没有禁用的监听器。输入字段只能在页面加载后由JavaScript启用/禁用(或者由某个用户在其开发工具检查器中弄乱HTML)。因此,如果要检测这些更改,则必须使用,并侦听所需元素的属性突变,以便在将
禁用的
属性添加到输入字段时进行检查

下面是我所说的一个例子:

var btn=document.getElementById('toggle'),
输入=document.getElementById('inp');
//这只是为了演示MutationObserver的行为
btn.addEventListener('click',function(){
如果(input.disabled)input.disabled=false;
else input.disabled=true;
});
var观察者=新的突变观察者(功能(突变){
对于(变量i=0,突变;突变=突变[i];i++){
if(mutation.attributeName=='disabled'){
if(突变。目标。禁用){
//元素已被禁用,请执行某些操作
警报('您已禁用输入!');
}否则{
//元素已启用,请执行其他操作
警报('您已启用输入!');
}
}
};
});
//观察属性的变化
observer.observe(输入,{attributes:true})
尝试单击按钮以禁用/启用输入


切换
我知道这不是最好的方法,但是:


是什么禁用/启用了它?这是一个knockoutjs应用程序,因此当数据可用时,knockout将启用它。那么异步数据从何而来?您必须连接到异步函数可用的任何方法,如果不发布这些方法,这是不可能回答的?您是否检查了敲除api/文档中的任何可用回调?通常情况下,像knockout这样的成熟库会意识到您有这些类型的需求,并会公开事件或回调供您使用。在您发布您正在使用的knockout功能之前,很难更加具体。你正在使用的敲除中的某些内容会影响元素的启用状态,“某些内容”对你来说是正确方向上的一个重要点。这真的不是一个好主意。。。另外,你每1000毫秒检查一次,也就是一秒钟:这真是一个很高的延迟!我认为这不会造成很大的延迟,因为他想等待modal加载时间的结束,但好吧。。。我更喜欢你的解决方案我没有dv,但我把它标记为解决方案。它不像我希望的那样优雅,但它完成了任务。谢谢。@CodesLikeA_Mokey是的,我知道,但它实际上是唯一有价值的解决方案,可以实时检测此类属性修改:\
var timeToCheck = 1000, past = 0;

function wait_enable (element) {
    var timer = setInterval(function(){
        if(element.is(":enabled")){
            element.focus();
            clearInterval(timer);
        }
        /* //here you can set a limit
        past += timeToCheck;
        if (past > limit) {
            clearInterval(timer);
        }
        */
    }, timeToCheck);
}

var textInput = $("input");
wait_enable(textInput);

$("button").on("click", function(){
    textInput.prop("disabled", false);
});