0

クエリ後の結果に条件を適用する方法がわかりません。このコードは以前に尋ねられましたが、私はそれを強化したかった

require(["dojo/parser", "dojo/ready", "dojo/query", "dojo/on", "dijit/form/Select", "dojo/domReady!"], function (parser, ready, query, on, Select) {
ready(function () {
    parser.parse();

    var select_Card = new Select({
        name: 'select_PCBA',
        options: [{
            label: "<span id='NotinUse'><b>&nbsp&nbsp&nbsp. . .</b></span>",
            value: "",
            selected: true
        }, {
            label: "<span id='NotinUse'><b>&nbsp&nbspMk7ABC Card</b></span>",
            value: "testdata1970_05"
        }, {
            label: "<span id='inUse'><b>&nbsp&nbspMk7CBC Card</b></span>",
            value: "testdata1970_10"
        }, {
            label: "<span id='NotinUse'><b>&nbsp&nbspMk10DC Card</b></span>",
            value: "testdata2060_03"
        }, {
            label: "<span id='NotinUse'><b>&nbsp&nbspMk6BC Card</b></span>",
            value: "dbProdigy"
        }, {
            label: "<span id='NotinUse'><b>&nbsp&nbspMk6NBC Card</b></span>",
            value: "dbProdigy_MK6N"
        }, ],
        style: {
            width: '150px'
        }
    }, "select_Card");

    select_Card.startup();


    on(select_Card, 'change', function(newValue)
    {
        if query('#inUse')
        {
            alert('Item selected is '+ newValue);
        }
        else
        {
            alert('Please select the only highlighted card');                           
        }
    });
    });
});

またはあなたの便宜のために私のjsfiddleを見てください。

それとももっと良い方法がありますか?

ありがとうアドバイスしてください

クレメント

4

2 に答える 2

0

まず第一に、あなたのコードは実行さえされません、あなたのon()関数はすべて厄介で、deeditorにそれを貼り付けるだけでエラーが表示されました。次に、まったく同じである複数のIDを使用することは非常に悪い考えです。代わりに、クラスを使用してください。

on(select_Card, 'change', function(newValue)
{
  var display = this.get('displayedValue');
  if(display.indexOf("class='inUse'") !== -1 || newValue === 'testdata1970_10'){
    alert('correct stuff')
  }else{
    alert('error');
  }
});

http://jsfiddle.net/73F2t/

これは修正されたフィドルです。or句は、フィルタリングにどちらの条件も使用でき、機能するはずであることを意味します

于 2013-01-18T05:36:31.683 に答える
0

jsFiddleを更新しました:http://jsfiddle.net/fredfortier/q5LC7/11/。いくつかの問題がありました。私はそれを実行するために「準備ができている」ものをクリーンアップしました。

コードの構造には、クリーンアップしたい問題がいくつかあると思います。しかし、私はあなたのコードをあまり変更したくなかったので、私はそれを機能させました。重要なことの1つは、同じIDを複数回使用していたことです。クラスに変更しました。また、クエリ関数はクロージャーにスコープされておらず、domを検索します。したがって、イベントハンドラーの条件は機能しませんでした。

繰り返しになりますが、このコードが非常に洗練されていて、別の方法で取り組むことができるとは思いませんが、ここでは、あなたが持っていたものに大きな変更を加えることなく機能しています。

require(["dojo/parser", "dojo/ready", "dojo/query", "dojo/on", "dijit/form/Select", "dojo/_base/array", "dojo/domReady!"], function (parser, ready, query, on, Select, array) {

    console.debug('rendering...');
    var select_Card = new Select({
        name: 'select_PCBA',
        options: [{
            label: "<span class='NotinUse'><b>&nbsp&nbsp&nbsp. . .</b></span>",
            value: "",
            selected: true
        }, {
            label: "<span class='NotinUse'><b>&nbsp&nbspMk7ABC Card</b></span>",
            value: "testdata1970_05"
        }, {
            label: "<span class='inUse'><b>&nbsp&nbspMk7CBC Card</b></span>",
            value: "testdata1970_10"
        }, {
            label: "<span class='NotinUse'><b>&nbsp&nbspMk10DC Card</b></span>",
            value: "testdata2060_03"
        }, {
            label: "<span class='NotinUse'><b>&nbsp&nbspMk6BC Card</b></span>",
            value: "dbProdigy"
        }, {
            label: "<span class='NotinUse'><b>&nbsp&nbspMk6NBC Card</b></span>",
            value: "dbProdigy_MK6N"
        }, ],
        style: {
            width: '150px'
        }
    }, "select_Card");

    select_Card.startup();

    on(select_Card, 'change', function(newValue)
    {
        console.debug('got selected value:', newValue, 'from options:', select_Card.options);
        array.forEach(select_Card.options, function(option) {
            if (option.value == newValue) {
                  console.debug('found selected option in the list: ', option);
                  if (option.label.indexOf("'inUse'") != -1) {
                        alert('Item selected is '+ newValue)
                  } else {
                        alert('Please select the only highlighted card');
                  }
            }
        });
    });

});

于 2013-01-18T05:48:44.443 に答える