2012-02-14 53 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