2012-02-14 31 views
3

我有2个可选的文本框,只有1个文本框可以包含数据。我需要它动态启用/禁用其他文本框,当有一些东西进入它。默认情况下,它们都应该被启用,但是当另一个内容被输入时应该禁用它们。我已经在下面的代码中工作了,但现在看起来并没有这样做。它基本上每半秒检查一次是否输入一个值。Javascript只允许一个文本框包含值

setInterval(function(){ 
if ($("input[name=audioUri]").val().length != 0) { 
    $("input[name=videoUri]").attr("disabled", "disabled"); 
    $("input[name=audioUri]").attr("disabled", ""); 
} else if ($("input[name=videoUri]").val().length != 0) { 
    $("input[name=audioUri]").attr("disabled", "disabled"); 
    $("input[name=videoUri]").attr("disabled", ""); 
} else { 
    $("input[name=videoUri]").attr("disabled", ""); 
    $("input[name=audioUri]").attr("disabled", "");  
}} , 500); 

它检查,看看是否已经有值的文本框在页面加载时,并确定如何从那里做,但是当我第一次加载页面时,两个框变得越来越无效。这几乎就像他们认为文本框中已经有东西了。当我检查框的值是空字符串“”,也许我应该检查.val()!=“”?

我想可能有更好的方式来处理它,而不需要setInterval函数。有任何想法吗?

UPDATE: http://jsfiddle.net/7mKzy/1/

+0

所有的都是很好的答案,我从它们中的一些中分出一些已用过的零碎。用JSfiddle示例更新。 – bjo 2012-02-14 16:34:53

回答

1

是的,你可以尝试keyupkeypress,当用户开始输入文本将触发。

2

您可以在文本框中使用事件.change()。所以每次你的文本框都有变化。您调用一个函数来启用或禁用其他文本框。

$("#IdTextbox").change(function() { 
     yourFunction(); 
    }); 

要检查您的文本有一些数据使用:

if ($('#txt').val() != "") { 
      doSomething(); 
} 
1

让同时启用,并且不使用设定的时间间隔。 在文本框中使用参数onChangekeyupkeypress调用一个函数,验证框上是否有新内容,并执行启用/禁用。

1

做它keydown()并使用prop()

$('input[name=audioUri]').keydown(function(){ 
    if (!$(this).val()) { 
     $('input[name=videoUri]').prop("disabled", true); 
    } 
}); 

,并检查负载,只是做在DOM准备:

$(function(){ 
    if (!$('input[name=audioUri]').val()) { 
     $('input[name=videoUri]').prop("disabled", true); 
    } 
}); 

你也许应该编写一个函数来保持干燥。

+0

不知道道具的功能,我喜欢它! – bjo 2012-02-14 16:39:00