6

この関数はフォームonSubmit中に実行され、FirefoxとChromeでは正常に機能しますが、IEでは機能しません。indexOfだと思いますが、動作させる方法が見つからないようです。

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;
}

}
4

4 に答える 4

18

IEには、配列にこのメソッドがないだけですが、 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;
  };
}

これにより.indexOf()、欠落している場合(この時点で、IE <9にいることを意味します)、それを使用できます。IE8でさえこれがまだないのはなぜですか?私はそこであなたを助けることはできません...

于 2010-09-13T02:29:39.277 に答える
10

プロジェクトですでにjQueryを使用している場合は、$。inArray()を使用できます。

http://api.jquery.com/jQuery.inArray/

于 2010-09-13T02:33:01.120 に答える
0

MSIE 11 などの indexOf() は、文字列以外の変数が好きではありません。郊外に .toString() を追加すると、修正されるはずです。

于 2014-07-23T16:36:02.617 に答える
-1

連想配列を使用する場合、この関数は不適切です。

その関数をコードに入れてこれを行う場合

var a = new Array();

a["one"] = "1";

for(var i in a){

   alert(i)

}

0 を取得します。これは、作成するすべての配列にキーとしてindexOf 挿入したことを意味しますindexOf

ただし、配列にはキーが1つしかなく、それが「1」である必要があります

jQueryを使用してください!

・メキア

于 2011-02-18T20:58:37.237 に答える