2015-02-12 23 views
1

我有5個輸入文本(答案選項),如果在非空輸入之前有空白輸入,則會給出錯誤。從A到E選項說明,用戶只填寫C和D.系統會給出錯誤,表示選擇A和B爲空(而E不報告爲錯誤)。代碼如下。問題是,有沒有更簡單的方法來做到這一點?jquery檢查前一個元素的空字段

https://jsfiddle.net/cyw8otLo/

<div> 
    <input type="text" id="optA" value="" /><br/> 
    <input type="text" id="optB" value="" /><br/> 
    <input type="text" id="optC" value="C" /><br/> 
    <input type="text" id="optD" value="D" /><br/> 
    <input type="text" id="optE" value="" /><br/> 
    <input type="submit" id="register" value="Register" /> 
</div> 

腳本

function getInputTextOf(searchStr, str, caseSensitive) { 
    var optArr = {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E'}; 

    var startIndex = 0, searchStrLen = searchStr.length; 
    var index, indices = []; 
    if (!caseSensitive) { 
     str = str.toLowerCase(); 
     searchStr = searchStr.toLowerCase(); 
    } 
    while ((index = str.indexOf(searchStr, startIndex)) > -1) { 
     indices.push(optArr[5 - index]); 
     startIndex = index + searchStrLen; 
    } 
    return indices; 
} 

var $input = $('input:text'), 
    $register = $('#register'); 

$('#register').on('click', function() { 
    var trigger = true; 
    var str = ''; 
    $($('div > input[id^="opt"]').get().reverse()).each(function (i) { 
     str = str + ($(this).val() === '' ? 0 : 1); 
    }); 

    var space = '*****'; 
    var start = str.indexOf("10"); //input start at 
    if (start > -1) { 
     var abc = space.substring(0, start+1) + str.substring(start+1, str.length); 
     var indices = getInputTextOf("0", abc, false); 
     alert('Option ' + indices.sort() + ' still empty!');  
    } 
}); 

回答

1

你可以嘗試像

var $input = $('input:text'), 
 
    $register = $('#register'); 
 

 
$('#register').on('click', function() { 
 
    var error, filled; 
 

 
    $($input.get().reverse()).each(function() { 
 
    if (this.value != '') { 
 
     filled = true; 
 
    } else if (filled && this.value == '') { 
 
     error = true; 
 
     return false; 
 
    } 
 
    }) 
 
    if (error) { 
 
    alert('e') 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="text" id="optA" value="" /><br/> 
 
    <input type="text" id="optB" value="" /><br/> 
 
    <input type="text" id="optC" value="C" /><br/> 
 
    <input type="text" id="optD" value="D" /><br/> 
 
    <input type="text" id="optE" value="" /><br/> 
 
    <input type="submit" id="register" value="Register" /> 
 
</div>

+0

我用這個修改你的代碼來顯示哪些字段是空的https://jsfiddle.net/a0f7b258/。但警報也顯示'未定義'。你能告訴爲什麼嗎?而且,我修改你的代碼,'這個'部分,變成'$(this)',但它不起作用。我知道$(this)是jquery對象,但它爲什麼不起作用? – 2015-02-12 12:40:27

+0

@ aries.wandari參見https://jsfiddle.net/arunpjohny/a0f7b258/1/ – 2015-02-12 12:49:06

+0

如果你是'$(this)'那麼獲取值使用'$(this).val()'而不是'$ (this).value' – 2015-02-12 12:50:09

0

那麼你可以嘗試設置一個標誌的東西布爾false

var flag = false; 
 

 
$('input[type="text"]:not(:last)').each(function() { 
 
    if ($.trim(this.value) == "") { 
 
    $(this).addClass('error').focus(); 
 
    return false; 
 
    } else { 
 
    flag = true; 
 
    } 
 
    return flag; 
 
});
.error { 
 
    border: solid 1px red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="text" id="optA" value="aaaa" /> 
 
    <br/> 
 
    <input type="text" id="optB" value="bbb" /> 
 
    <br/> 
 
    <input type="text" id="optC" value="C" /> 
 
    <br/> 
 
    <input type="text" id="optD" value="D" /> 
 
    <br/> 
 
    <input type="text" id="optE" value="" /> 
 
    <br/> 
 
    <input type="submit" id="register" value="Register" /> 
 
</div>

+0

呀涼..而不是通知尚屬空白,你把它集中在成立的第一個空白輸入所有輸入的。但是在這種情況下,你的代碼仍然失敗:輸入A B C被填充,這不應該給出警告,因爲填充之間沒有空白輸入。 – 2015-02-12 08:12:12

+0

@ aries.wandari就像這樣更新。 – Jai 2015-02-12 09:02:39

+0

我錯過了什麼嗎?你的代碼不起作用。例如,如果我刪除'aaaa',它就不會顯示錯誤標誌。 – 2015-02-12 12:42:32