2012-06-12 29 views
8

Gặp lỗi khi sử dụng lệnh gọi indexOf trong Javascript trên Firefox và Opera. Hoạt động tốt trong IE.indexOf không phải là một chức năng trong Firefox, Opera nhưng hoạt động trong IE, indexOf thay thế trong javascript để kiểm tra chuỗi chứa?

Tiếp theo là thông báo lỗi:

Action

function anonymous(Grid, Row, Col, Event) { 
    return Grid.ActionShowPopupMenu(); 
} 

cho sự kiện OnRightClick thất bại với ngoại lệ: row.id.indexOf không phải là một chức năng

Tôi đang thử nghiệm mà một chuỗi chứa một chuỗi khác trong Javascript và sử dụng hàm indexOf của một chuỗi. Các cuộc gọi tuy nhiên đang được thực hiện trong các hàm JQuery. Có lẽ đó là lý do cho vấn đề? Có cách nào khác để sử dụng indexOf trong Javascript để kiểm tra xem chuỗi có chứa chuỗi khác không? Có cách giải quyết nào cho vấn đề này không?

+2

indexOf chắc chắn hoạt động trong FF. Được sử dụng nó cho không chắc chắn bao lâu .. Nó có thể là một vấn đề là với các đối tượng bạn đang gọi nó với. – techfoobar

+0

Nếu bạn đang truyền các đối tượng jQuery, đặc biệt nếu 'Row' là đối tượng jQ,' .id' sẽ là undefined/null. Hoặc sử dụng 'Row.getAttr ('id'). IndexOf()' hoặc sử dụng 'Row.get (0) .id.indexOf()'. Nếu điều đó không thành công: 'Row' được viết hoa trong khai báo hàm của bạn, nhưng ngoại lệ cho thấy một trường hợp thấp hơn' row'. JS là CaseSensitive –

Trả lời

7

String.indexOf hoàn toàn OK trong tất cả các trình duyệt. Tôi giả sử id tài sản của hàng bạn đối tượng là không có chuỗi (hay mảng, btw, vì indexOf cũng được xác định trên các mảng (trừ IE))

+0

có, đó là vấn đề. id không phải luôn luôn là một chuỗi. cảm ơn tất cả các ý kiến! – user840930

0

indexOf() là ok cho tất cả các trình duyệt. Nó được thiết kế cho cả hai, Chuỗi và Mảng, nhìn thấy điều này: http://jsfiddle.net/SquTp/

Có thể có điều gì đó sai với lựa chọn nhà bạn hoặc bạn có thể sử dụng sai cách.

+0

không hoạt động trong Fr0zenFyr

3

indexOf không phù hợp với IE trước IE9. Nếu bạn muốn mã của bạn hoạt động theo nghĩa là < 9, bạn nên xác định phương thức cho các trình duyệt không tuân thủ trong tệp js chung có thể được bỏ vào mỗi trang. Xem this thread để biết thêm chi tiết. Mã được lấy từ Mozilla

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this == null) { 
      throw new TypeError(); 
     } 
     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) { 
      return -1; 
     } 
     var n = 0; 
     if (arguments.length > 1) { 
      n = Number(arguments[1]); 
      if (n != n) { // shortcut for verifying if it's NaN 
       n = 0; 
      } else if (n != 0 && n != Infinity && n != -Infinity) { 
       n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
      } 
     } 
     if (n >= len) { 
      return -1; 
     } 
     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) { 
       return k; 
      } 
     } 
     return -1; 
    } 
} 
Các vấn đề liên quan