0

地元のランチスポットを紹介するサイトを作っています。このサイトでは、チェックボックスを使用してコンテンツの表示と非表示を切り替えています:-

<li>Sandwich: <input type="checkbox" checked="checked" id="sandwichbox" onclick="boxclick(this,'sandwich')" /></li>
<li>Salad: <input type="checkbox" id="saladbox" onclick="boxclick(this,'salad')" /></li>
<li>Pasta: <input type="checkbox" id="pastabox" onclick="boxclick(this,'pasta')" /></li>

これらは正常に機能していますが、switch ステートメントを使用してマーカーを削除しています。

function hide(category) {
switch(category) {
    case "sandwich":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].sandwich == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
    case "salad":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].salad == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
    case "pasta":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].pasta == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
}
}

私がこれを行っているのは、店舗が複数のもの (サンドイッチとサラダなど) を販売できるため、各店舗が単一のカテゴリを持つことはできないからです。したがって、私の XML 内には、個々の製品ごとにノードがあります:-

<markers>
    <marker name="Earl of Sandwich" address="40 Ludgate Hill" tel="020 7236 2846" website="www.earlofsandwich.co.uk" lat="51.514072" lng="-0.101638" sandwich="1" salad="1" pasta="" oriental="" curry="" mexican="" jacket="" soup="1" sushi="" roast="" wraps="1" falafel=""/>
    <marker name="Chao! Now" address="4 St Andrews Hill" tel="02036320368" website="www.chaonow.co.uk" lat="51.513008" lng="-0.101322" sandwich="1" salad="" pasta="" oriental="1" curry="" mexican="" jacket="" soup="1" sushi="" roast="" wraps="" falafel=""/>
</markers>

私がやりたいのは、switch ステートメントを削除して、次のようなものに置き換えて、カテゴリ値を for ループに渡すことですが、動作するように gte できないようです:-

function hide(category) {
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].category == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

私は次のことを試しました: -

function hide(category) {
    var mymarker = "gmarkers[i]." + category;
      for (var i=0; i<gmarkers.length; i++) {
        if (mymarker == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

しかし、これは mymarker を変数として渡すだけで、i には値が割り当てられていません。

何か助けがあれば大歓迎です。または、間違った道を進んでいて、データに別の形式を使用する必要がある場合は、指摘してください。私が考えていたもう1つの方法は、値を配列に追加してその配列をループすることでしたが、値が1またはnullしかなく、カテゴリ変数を使用して2次元配列を再び機能させることができませんでした。

事前に感謝します。さらに情報が必要な場合はお知らせください。

4

2 に答える 2

1

変数を使用してオブジェクト プロパティにアクセスしたいと考えています。ドット表記の代わりにブラケット表記を使用します。オブジェクト「人」があるとします

var person = {name: "someone", age: 23};

次のように「name」プロパティにアクセスできます

var name = person["name"]

プロパティ名に構文エラーまたはキーワード/予約語のいずれかになる文字が含まれている場合は、ブラケット表記を使用することもできます。例えば:

person["first name"] = "Nicholas";

また、中括弧内に変数名を含めることもできます。

person[propertyName] = "some value"; //propertyName is a variable

だからあなたの場合はそうあるべきです

function hide(category) {
    var mymarker = gmarkers[i][category];
      for (var i=0; i<gmarkers.length; i++) {
        if (mymarker == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

お役に立てれば :)

于 2013-10-16T12:36:24.437 に答える
0

カテゴリがマーカーのプロパティである場合、これは機能するはずです。

function hide(category) {
   for (var i=0; i<gmarkers.length; i++) {
     if (gmarkers[i][category] == 1) {
        gmarkers[i].setVisible(false);
     }
   }
}
于 2013-10-16T12:39:54.873 に答える