2014-11-07 54 views
0

如何從下拉列表中選擇一個值,方法是使用文本而不是值或索引? 的HTML:使用文本從下拉列表中選擇值

<select name="category_group" id="category_group" sel_id="" > 
    <option value="0" selected="selected">Kies de rubriek</option> 

    <option value='1000' style='background-color:#dcdcc3;font-weight:bold;' disabled="disabled" id='cat1000' > 

      -- VOERTUIGEN -- 

    </option> 

    <option value='1020' id='cat1020' > 
     Auto's 

    </option> 

    <option value='1080' id='cat1080' > 
     Auto's: Onderdelen 

    </option> 

    <option value='1040' id='cat1040' > 
     Motoren 

    </option> 

    <option value='1140' id='cat1140' > 
     Motoren: Onderdelen 

    </option> 
</select> 

腳本:

this.fillSelectors('form[name="formular"]', { 
    'select[name="category_group"]': 'Motoren' 
}, false);  

這並不工作,但它的工作原理使用 「MOTOREN」(這是1140)的值。 如何使用fillSelectors使其與文本一起工作?

+0

對不起,不清楚,但「Motoren」的VALUE(即'1040')起作用。因此,this.fillSelectors('form [name =「formular」]',{ 'select [name =「category_group」]':'1040'},false);作品 – 2014-11-07 21:47:29

+0

你在這個頁面上有jquery嗎? – Rippo 2014-11-08 18:17:38

回答

2

CasperJS'fill函數只能使用該值。在你的情況下,這不起作用,因爲你試圖設置顯示的值而不是分配的選項值。雖然,這可以很容易地擴展:

casper.selectOptionByText = function(selector, textToMatch){ 
    this.evaluate(function(selector, textToMatch){ 
     var select = document.querySelector(selector), 
      found = false; 
     Array.prototype.forEach.call(select.children, function(opt, i){ 
      if (!found && opt.innerHTML.indexOf(textToMatch) !== -1) { 
       select.selectedIndex = i; 
       found = true; 
      } 
     }); 
    }, selector, textToMatch); 
}; 

casper.start(url, function() { 
    this.selectOptionByText('form[name="formular"] select[name="category_group"]', "Motoren"); 
}).run(); 

爲SO聯繫頁面上工作的完整示例見this code

相關問題