2013-01-18 38 views
0

我無法計算如何將條件應用於查詢後的結果。 這段代碼被問過,但我想提高它dojo 1.8:對查詢後的結果應用條件

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

OR請參閱my jsfiddle爲您提供方便。

還是你有更好的辦法?

請告知 感謝

克萊門特

回答

0

我已經更新您的jsfiddle:http://jsfiddle.net/fredfortier/q5LC7/11/。有幾件事情是錯的。我清理了「準備好」的東西以使其運行。

我相信你可能想要清理的代碼結構有幾個問題。但我不想過多地改變你的代碼,所以我只是讓它工作。一件重要的事情是你多次使用相同的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'); 
        } 
      } 
     }); 
    }); 

});

+0

嗨弗雷德裏克,這是一個快速的幫助。我開始更好地理解,並從您的調試方式中學到了知識。感謝您的大力幫助。 – user1739825

+0

不客氣。是的,如果您剛剛開始使用Dojo或其他DOM操作工具包,像Firebug這樣的調試器將幫助您瞭解對象和DOM元素的結構。 –

0

首先你的所有代碼犯規,甚至運行,您對()函數是所有雜亂的,只是把它粘貼在德編輯器顯示錯誤。第二,使用完全相同的多個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子句意味着你可以使用條件過濾,它應該工作

+0

嗨Richcardo ...感謝您的意見 – user1739825