2024-08-28 05:00:04

事件

显然,一个被禁用的<input>没有被任何事件处理

有没有办法解决这个问题?

<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
    $(this).removeAttr('disabled');
})

在这里,我需要单击输入来启用它。但是如果我不激活它,输入就不会被发布。


当前回答

我找到了另一个解决方案:

<input type="text" class="disabled" name="test" value="test" />

类"disabled"通过不透明度模仿禁用元素:

<style type="text/css">
    input.disabled {
        opacity: 0.5;
    }
</style>

如果元素被禁用,则取消事件并删除类:

$(document).on('click','input.disabled',function(event) {
    event.preventDefault();
    $(this).removeClass('disabled');
});

其他回答

今天我们遇到了类似的问题,但我们不想更改HTML。我们使用mouseenter事件来实现

var doThingsOnClick = function() {
    // your click function here
};

$(document).on({
    'mouseenter': function () {
        $(this).removeAttr('disabled').bind('click', doThingsOnClick);
    },
    'mouseleave': function () {
        $(this).unbind('click', doThingsOnClick).attr('disabled', 'disabled');
    },
}, 'input.disabled');

这里的建议看起来也很适合回答这个问题

在禁用元素上执行单击事件?Javascript jQuery

jQuery('input#submit').click(function(e) {
    if ( something ) {        
        return false;
    } 
});

$(函数(){ $(“输入:禁用”).closest (" div ") .click(函数(){ (美元);(输入:禁用)。attr(“禁用”,假).focus (); }); }); < script src = " https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js " > < /脚本> < div > <input type="text" disabled /> < / div >

我会建议一个替代方案-使用CSS:

input.disabled {
    user-select : none;
    -moz-user-select : none;
    -webkit-user-select : none;
    color: gray;
    cursor: pointer;
}

而不是disabled属性。然后,您可以添加自己的CSS属性来模拟禁用的输入,但是具有更多的控制。

或者用jQuery和CSS做这个!

$('input.disabled').attr('ignore','true').css({
    'pointer-events':'none',
     'color': 'gray'
});

这样你可以让元素看起来是禁用的,没有指针事件会被触发,但它允许传播,如果提交,你可以使用属性'ignore'来忽略它。