2012-09-05 40 views
0

所以,首先的代碼:jQuery的重寫功能

$("input").on("keyup", function() { 
    var filled = $("input").filter(function() { 
     return this.value.length > 0; 
    }); 

第一部分

if (filled.length < 1) {       
    var test= $('#test').val(); 
    if (test == ""){ 
     $('#test').css('border-color',green); 
    } 
} else { ... } 

第2部分

if (filled.length > 0 && filled.length <= 4) {     
    $('#test').keyup(function() { 
     var test = $('#test').val(); 
     if (test=="") { 
      $('#test').css('border-color',red); 
     } 
    } 
}); 

這是從其中存在4個的文本輸入是可選形式但如果用戶在其中一個領域,他必須把他們全部。

所以當filled.length> 0和< = 4時,這些字段是必需的,我希望輸入邊框爲紅色。

但是當填充。長度< 1(= 0),那麼我希望所有的邊框都是綠色的。

問題是,如果我在輸入上寫了一些東西,然後全部刪除它們,它們應該呈綠色,但Part2會覆蓋Part1並顯示爲紅色。

我的問題是:
- 我該如何解決這個問題?
- 這個問題從哪裏來?(jQuery的理論)

越接近我能得到一個「正確」的代碼替換部分1:

if(filled.length < 1) 
{      
    $('#test').keyup(function() 
    { 
     var test = $('#test').val(); 

     if(test=="") 
     { 
       $('#test').css('border-color',green); 
     } 
    } 

} 

但是當輸入是空的,我要刪除一個更多的時間(關鍵請參閱第1部分中的第2部分。

PS:如果需要更多代碼或解釋有關該問題,請詢問=)。

編輯
小提琴:http://jsfiddle.net/WzE9k/13/。代碼不完全一樣,但重點是相同的。當這個字段爲空時,它應該顯示「沒有任何東西是寫入的」,但它沒有。

+0

我建議建立一個[的jsfiddle(HTTP://的jsfiddle。淨),當你有這麼多的代碼:)。 –

+1

請在發佈問題前格式化您的代碼;它會大大增加被回答的機會。 – raina77ow

+0

我認爲需要jsfiddle以及一切看起來不錯我覺得過濾功能是問題。爲什麼不做一個每一個,然後調用一個函數,並使用「this」作爲檢查值的參考。 –

回答

0

繼承人的你可以做什麼

$('input').keyup(function() { 
    // store how many textboxes are not empty 
    var len = $('input').filter(function() { 
     return $(this).val().length > 0 
    }).length; 
    $('input').css('border', function() { 
     // if number is less than 4 and greater than zero 
     // return red 
     // else return green 
     return len < 4 && len > 0 ? 'red solid 1px' : 'green solid 1px'; 
    }); 
});​ 

http://jsfiddle.net/7mVLu/

繼承人與文本改變

http://jsfiddle.net/7mVLu/1/

+0

完美謝謝! – user1648791

0

如果要訪問多個項目的話,我會更好地建議使用class,這樣就可以區分存在相同的父內的任何其他相同的元素。

檢查這個 http://jsfiddle.net/GgzC5/