2014-06-17 48 views
1

我有文本框,当用户单击其中一个文本框时,所有其他文本框将被禁用。它在Firefox中工作正常,我无法理解的是,启用文本框在IE10中不起作用(我无法在启用(?)时编辑文本框内的值。下面是我的jQuery代码,我是否缺少IE10的东西?我已经尝试过.prop('禁用',假),.prop('只读',假),但在IE10中没有任何作品,但在Firefox中我没有问题请帮忙。IE10 - 禁用/启用文本框属性

function DisableTboxExceptActiveTxbox(txtbox) { 
    $('input[id*="tbxQty"]').attr("disabled", true); 
    $(txtbox).removeAttr("disabled"); 
} 

取消按钮onclick事件:

function CancelUpdate(btn) { 
    $('input[id*="tbxOrderQty_"]').removeAttr('disabled'); 
} 

回答

3

您应该使用.prop('disabled', true|false)禁用或启用文本框时,而不是attr('disabled', true)removeAttr('disabled')。所以,正确的代码是:

function DisableTboxExceptActiveTxbox(txtbox) { 
    $('input[id*="tbxQty"]').prop("disabled", true); 
    $(txtbox).prop("disabled", false); 
} 

UPDATE:

看来,第一条语句导致IE 10和11,使当前的文本框被禁用,尽管第二行移除disabled财产,当您开始与文本框交互时,IE会重新添加它。当您在运行代码时查看DOM Explorer时可以看到这一点。

试试这个代码,而不是:

function DisableTboxExceptActiveTxbox(txtbox) { 
    $('input[id*="tbxQty"]').not(txtbox).prop("disabled", true); 
} 

另见本琴:http://jsfiddle.net/pX6Kv/2/

这将选择所有的文本框,然后过滤掉电流文本框,然后将剩余的为禁用。有趣的bug。如果它还没有,我会和微软一起提交。


你应该考虑增加一个类来这些文本框,而不是使用[id*="tbxQty"],因为这将是在大多数浏览器速度更快。

然后,CancelUpdate:

function CancelUpdate(btn) { 
    $('input[id*="tbxOrderQty_"]').prop('disabled', false); 
} 

您可能还需要更加一致的,你要如何缩写“文本框”,为tbxtxtboxTboxTxbox都使用。只是一个建议,但:)

+0

我已经尝试过这些,但他们也不会工作在IE10。它可以在Firefox中使用,但不能在IE10中使用。 – sd4ksb

+0

下面是这种事情的工作版本:http://jsfiddle.net/pX6Kv/你可以确认它是否适用于IE10?如果是这样,这可能是您的处理程序如何绑定到文本框本身的问题。 –

+0

这绝对是IE10。你的jsfiddle在那里也不起作用。 – sd4ksb

-1

让我知道这改变任何东西:

function DisableTboxExceptActiveTxbox(txtbox) {  
    $("input[type=text]").click(function (e) { 
    $("input[type=text]").attr("disabled", true); 
    $(this).removeAttr("disabled"); 
    } 
} 
+0

这不起作用。 – sd4ksb

+0

嗯,你点击后可以粘贴html代码吗?只是为了看看这个标记是如何的... – user3743250