2013-07-21 29 views
11
if($('#this').val().indexOf('4289')){ 
    Do something 
else 
    Do something. 

này chỉ làm việc với 4289 rằng,
Khi tôi cố gắng thêm số điện thoại khác để được lập chỉ mục bên cạnh nó sử dụng 'hay', nó không hoạt động. Làm thế nào tôi nên đặt số khác. Ví dụ:Làm thế nào để sử dụng IndexOf trong JQuery

IndexOf('4289||78843') 

Tôi muốn điều này để kiểm tra số này và nếu số trong trường nhập không phải là một trong số này, để báo lỗi.

Dưới đây là những gì sẽ xảy ra khi chết khi truy cập lại trường.

$('#Zip').blur(function(){ 
     if (($(this).val().indexOf('0860') > -1)||($(this).val().indexOf('0850') > -1)){ 
     $('#Status_Zip').html("No way.") 
     $(this).alterClass('*_*', 'Success') 
     return false; 
     }else{$('#Status_Code').hide() 
     $(this).alterClass('*_*', 'Error') 
     $(this).css('border-color', '#F00').css('background-color', '#FFC').effect("pulsate",{times:4},2) 
      return true; 
     } 
    }) 

Trả lời

18

Đó là vì nó sẽ tìm chuỗi '4289||78843', không tồn tại trong mục tiêu mà tôi giả định. Các toán tử logic không thể được ném vào bất cứ đâu, chỉ khi có các giá trị thực tế để hoạt động hợp lý. Một cái gì đó như thế này:

if(($('#this').val().indexOf('4289') > -1) || 
    ($('#this').val().indexOf('78843') > -1)) 

Giá trị trả lại của hàm indexOf() là chỉ số số của giá trị đó trong giá trị đích hoặc -1 nếu không tìm thấy. Vì vậy, đối với mỗi giá trị mà bạn đang tìm kiếm, bạn muốn kiểm tra xem đó có phải là chỉ mục là > -1 (có nghĩa là nó được tìm thấy trong chuỗi). Lấy toàn bộ điều kiện đó và || nó với một điều kiện khác, và đó là một phép toán logic.

Edit: Về nhận xét của bạn, nếu bạn muốn trừu tượng này vào một chút gì đó bụi và chung chung hơn bạn có thể giải nén nó vào chức năng riêng của nó mà lặp trên một tập hợp các chuỗi và trả về true nếu bất kỳ trong số đó là ở chuỗi đích. Có lẽ một cái gì đó như thế này:

function isAnyValueIn(target, values) { 
    for (var i = 0; i < values.length; i++) { 
     if (target.indexOf(values[i]) > -1) { 
      return true; 
     } 
    } 
    return false; 
} 

Có thậm chí có thể là một cách thanh lịch hơn để làm điều đó với .forEach() trên mảng, nhưng điều này ít nhất thể hiện ý tưởng. Sau đó, ở nơi khác trong mã bạn sẽ tạo mảng giá trị và gọi hàm:

var values = ['4289', '78843']; 
var target = $('#this').val(); 
if (isAnyValueIn(target, values)) { 
    // At least one value is in the target string 
} 
+0

Ok, thật tuyệt. Nó hoạt động. Điều duy nhất là nếu tôi sẽ đặt hơn 20 con số này, mã sẽ chỉ tồn tại lâu với rất nhiều chỉ mục này. Chúng ta không thể rút ngắn một cái gì đó ở đâu đó. ? –

+0

@BlessingThinker: Chắc chắn, nó có thể được tóm tắt thành chức năng mục đích chung của riêng nó. Bất cứ lúc nào có rất nhiều sao chép/dán đang diễn ra trong mã thì có khả năng là ít nhất một hàm có thể được trích xuất. Có lẽ có nhiều cách tiếp cận hơn bên cạnh này, nhưng nó có vẻ đơn giản, đủ. Tôi đã cập nhật câu trả lời với một ví dụ. – David

+0

Tôi sử dụng làm mờ, sau đó wen một đặt đúng số nó xác nhận đúng, nhưng khi bạn quay trở lại và thay đổi số đó để cái gì khác, chức năng dường như đã chết. –

Các vấn đề liên quan