Javascript(jQuery)/HTML:设置一个<;输入>;或<;选择>;要启用,不工作?

Javascript(jQuery)/HTML:设置一个<;输入>;或<;选择>;要启用,不工作?,javascript,jquery,html,Javascript,Jquery,Html,我目前正在使用Mozilla Firefox 14.0.1和Google Chrome 20.0.1132.57(我认为是最新版本) 我的代码是这样的: 以下是我希望发生的事情: 在input1中输入一些内容 单击禁用的输入(触发onchange函数…参见jQuery) 注意:在input1上输入内容后,我们单击禁用的输入,而不单击其他内容 现在应启用禁用的输入。因为通过单击禁用的输入,它应该触发input1的onchange函数 这在谷歌Chrome上是可行的,但在Mozilla Firefo

我目前正在使用Mozilla Firefox 14.0.1和Google Chrome 20.0.1132.57(我认为是最新版本)

我的代码是这样的:

以下是我希望发生的事情:

  • 在input1中输入一些内容
  • 单击禁用的输入(触发onchange函数…参见jQuery)

    注意:在input1上输入内容后,我们单击禁用的输入,而不单击其他内容

  • 现在应启用禁用的输入。因为通过单击禁用的输入,它应该触发input1的onchange函数


  • 这在谷歌Chrome上是可行的,但在Mozilla Firefox上是不可行的。为什么单击禁用的元素不会触发输入的onchange函数?这也适用于单击禁用的而不是禁用的

    禁用的
    输入不会触发FireFox上的
    更改
    单击
    事件

    $('li:eq(1)').click(function(e){
        if($.trim($('#input1').val()).length != 0){
            $('#input2').prop('disabled', false);
        }
    });
    

    您可以使用跨浏览器的jQuery
    $.trim()
    函数代替
    trim()

    $('#input1').change(function(){
        if($.trim($(this).val()).length != 0){
            $('#input2').prop('disabled', false);
        }
    });
    

    禁用
    输入不会触发FireFox上的
    更改和
    单击事件

    $('li:eq(1)').click(function(e){
        if($.trim($('#input1').val()).length != 0){
            $('#input2').prop('disabled', false);
        }
    });
    

    您可以使用跨浏览器的jQuery
    $.trim()
    函数代替
    trim()

    $('#input1').change(function(){
        if($.trim($(this).val()).length != 0){
            $('#input2').prop('disabled', false);
        }
    });
    

    您的代码很好。问题是.change()在触发之前需要失去焦点(模糊)。尝试将其更改为.keyup()

    附加:这可能就是您想要的效果

    $('#input1').keyup(function(){
         $('#input2').prop('disabled', $(this).val().trim().length == 0);
    });​
    

    你的代码很好。问题是.change()在触发之前需要失去焦点(模糊)。尝试将其更改为.keyup()

    附加:这可能就是您想要的效果

    $('#input1').keyup(function(){
         $('#input2').prop('disabled', $(this).val().trim().length == 0);
    });​
    
    延伸

    如果您想在
    #input2
    上切换残疾,您可以简单地执行以下操作:

    $('#input1').change(function(){
        var isDisabled = !$.trim($(this).val()).length;
        $('#input2').prop('disabled', isDisabled );
    });
    
    还有演示:

    要扩展

    如果您想在
    #input2
    上切换残疾,您可以简单地执行以下操作:

    $('#input1').change(function(){
        var isDisabled = !$.trim($(this).val()).length;
        $('#input2').prop('disabled', isDisabled );
    });
    

    演示:

    问题是Firefox需要您键入“enter”或执行其他操作,因此input1在编写input1以播放“onchange”事件后会失去焦点。也许是链接到你的,这让我尝试了以下与Firefox兼容的方法。(我没有在其他浏览器上尝试)


    问题是Firefox需要您键入“enter”或执行其他操作,因此input1在编写了input1以引发“onchange”事件后会失去焦点。也许是链接到你的,这让我尝试了以下与Firefox兼容的方法。(我没有在其他浏览器上尝试)


    这是因为在FF中,当一个输入被禁用时,它实际上被禁用(它不会收到鼠标点击)

    单击禁用的元素不会在input1上产生模糊事件(焦点丢失),因此不会触发onchange

    您可以使用一些类和jQuery轻松解决这个问题。例如:

    <input class=disabled id=input2>
    
    然后

    $(function(){
      // disable keypresses on "disabled" input
      $('.disabled').keypress(function(e){
        e.preventDefault;
        e.stopPropagation;
        return false;
      });
      // doesn't allow to focus
      $('.disabled').focus(function(e){
        $(this).blur();
      });
    });
    
    要激活“禁用”元素,请执行以下操作:


    检查这里:

    这是因为在FF中,当输入被禁用时,它实际上被禁用(它不会收到鼠标点击)

    单击禁用的元素不会在input1上产生模糊事件(焦点丢失),因此不会触发onchange

    您可以使用一些类和jQuery轻松解决这个问题。例如:

    <input class=disabled id=input2>
    
    然后

    $(function(){
      // disable keypresses on "disabled" input
      $('.disabled').keypress(function(e){
        e.preventDefault;
        e.stopPropagation;
        return false;
      });
      // doesn't allow to focus
      $('.disabled').focus(function(e){
        $(this).blur();
      });
    });
    
    要激活“禁用”元素,请执行以下操作:


    查看此处:

    在这篇文章中看到@Andy E的答案,我认为这是解决您问题的最佳解决方案。

    在这篇文章中看到@Andy E的答案,我认为这是解决您问题的最佳解决方案。

    这在Firefox中没有区别。不知道为什么这么快就升级了。@Musa是的,它不起作用,因为没有禁用输入的事件。这在Firefox中没有区别。不知道为什么这么快就升级了。@Musa是的,它不起作用,因为没有禁用输入的事件。在Firefox中单击禁用的输入元素不会改变焦点,因此不会触发事件。如果你按Enter或点击窗口中的空白,它仍然工作…点击Firefox中禁用的输入元素不会改变焦点,所以它不会触发事件。如果你按Enter或点击窗口中的空白,它仍然工作……在FF中不起作用。单击禁用的元素不会产生任何效果。在FF中不起作用。单击禁用的元素不会产生任何效果。