2010-09-13 39 views
5

Chức năng này thực hiện trong các biểu mẫu onSubmit và hoạt động tốt trong Firefox và Chrome, nhưng không hoạt động trong IE. Tôi nghi ngờ đó là indexOf, nhưng tôi dường như không thể tìm cách để làm cho nó hoạt động.Tại sao indexOf không hoạt động trong Internet Explorer?

function checkSuburbMatch(e) { 

var theSuburb = document.getElementById('suburb').value; 
var thePostcode = document.getElementById('postcode').value; 

var arrayNeedle = theSuburb + " (" + thePostcode + ")"; 

if(suburbs.indexOf(arrayNeedle) != -1) { 
    alert("Suburb and Postcode match!"); 
    return false; 
} else { 
    alert("Suburb and Postcode do not match!"); 
    return false; 
} 

} 
+0

Biến "ngoại ô" có chứa gì? – Tim

+0

Đó là một chuỗi các chuỗi đi dọc theo dòng "suburbName (postCode)" – David

+0

có thể trùng lặp của [Tại sao không indexOf làm việc trên một mảng IE8?] (Http://stackoverflow.com/questions/3629183/why-doesnt -indexof-work-on-an-array-ie8). Xem thêm: [Làm thế nào để sửa lỗi Array indexOf() trong JavaScript cho trình duyệt IE] (http://stackoverflow.com/questions/1744310/), [Array indexOf thực hiện cho Internet Explorer] (http://stackoverflow.com/questions/2868696) – CMS

Trả lời

17

IE chỉ đơn giản là không có phương pháp này trên Array, bạn có thể thêm cho mình mặc dù, from MDC:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 

này cho biết thêm .indexOf() nếu nó mất tích (vào thời điểm này có nghĩa là bạn đang ở IE < 9) sau đó bạn có thể sử dụng nó. Đối với lý do tại sao ngay cả IE8 không có điều này? Tôi không thể giúp bạn có ...

+0

Điều này dường như không làm việc, và làm cho nó ngừng làm việc trong Firefox quá. Điều này cần phải được đặt sau khi chức năng được gọi hoặc ở đầu của kịch bản? – David

+0

@David: Nó cần phải được khai báo trước khi nó được gọi. –

-1

chức năng này là xấu khi sử dụng các mảng kết hợp.

nếu bạn đặt rằng hàm trong mã của bạn và thực hiện điều này

var a = new Array(); 

a["one"] = "1"; 

for(var i in a){ 

    alert(i) 

} 

Bạn nhận được 0, indexOf có nghĩa là bạn chèn indexOf như một chìa khóa cho mọi mảng bạn tạo

nhưng mảng chỉ nên có một khóa và đó là "một"

sử dụng jQuery!

-Mekias

0

indexOf() trên MSIE 11 và những người khác nó không giống như các biến không dây. Trên vùng ngoại ô, hãy thêm .toString() và nó sẽ sửa chữa nó.

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