2017-04-15 165 views
0

我是新來的編碼,但試圖幫助自己。如果任何人可以建議會很好。自動選擇值<select multiple =「multiple」>

我正在使用創建下面的表單的插件。我通過檢查瀏覽器上的元素來檢查這一點。

<select multiple="multiple" name="attendee_information_fields[]" id="attendee_information_fields" class="event-manager-multiselect" data-no_results_text="No results match" attribute="" data-multiple_text="Select Some Options" style="display: none;"> 
     <option value="full-name">Full name</option> 
     <option value="email-address">Email address</option> 
     <option value="phone">Phone</option> 
     <option value="location">Location</option> 
     <option value="gender">Gender</option> 
     <option value="age">Age</option> 
     <option value="terms-conditions">Terms &amp; Conditions</option> 
     <option value="become-a-cfp-camper">Become a CFP Camper</option> 
</select> 

這是必填字段。我想要的是選項值應該自動選擇值terms-conditionsbecome-a-cfp-camper。對於這一點,我寫下面的代碼在我的主題的functions.php文件:

if($_POST['attendee_information_fields']) { echo " 
<script type='text/javascript'> 
$('#attendee_information_fields').click(function() { 
    $('select#terms-conditions > option').attr('selected', 'selected'); 
    $('select#become-a-cfp-camper > option').attr('selected', 'selected'); 
}); 
</script>"; 
} 

好像沒有什麼改變,我無言以對。任何人都可以幫助我如何實現這一目標?非常感謝。

回答

0

$('select#terms-conditions > option')正在嘗試查找<select id="terms-conditions">中的所有<option>元素。你沒有那個;相反,你有一個<select id="attendee_information_fields">其中包含一個<option value="terms-conditions">

選擇該選項,你需要使用$('select#attendee_information_fields option[value=terms-conditions]')

+0

非常感謝您的回答。問題是,我應該在哪裏粘貼這個功能?因爲我不知道從插件生成這個表單的位置,所以我想在functions.php文件中回顯這個(請檢查我的原始文章),但沒有任何反應。任何想法應該在哪裏粘貼此代碼來完成結果?非常感謝 –

0

有幾個問題,您的問題:

  1. 你jQuery是選擇具有ID的<select>元素($('select#terms-conditions > option')),當你想什麼do實際上是用匹配的值來搜索嵌套的<option>元素,例如($('select option[value="terms-conditions"]')
  2. 您正在使用的.attr()代替.prop()設定布爾屬性

我的解決方案如下:

  1. 聽的<select>場的修改(我們儘量避免聽點擊輸入元素上的事件)。這是通過綁定.change()方法
  2. 經歷中的元素(由$(this).find('option')參考)發現
  3. 所有<option>元素,我們使用jQuery的.filter()方法只返回其值屬性的陣列中找到的元素篩選此集合完成。該數組應該包含您有興趣選擇的值:在本機JS中使用簡單的Array.prototype.indexOf方法進行評估:當索引返回值爲0或更大時,表示該值在您的數組中。你想看的陣列將是['become-a-cfp-camper', 'terms-conditions']
  4. 要篩選出的<option>元素,我們只需使用.prop('selected', true)來編程選擇它們。

$(function() { 
 
    $('#attendee_information_fields').change(function() { 
 
    $(this).find('option').filter(function() { 
 
     return ['become-a-cfp-camper', 'terms-conditions'].indexOf($(this).val()) > -1; 
 
    }).prop('selected', true); 
 
    }); 
 
});
select { 
 
    height: 200px; /* Just to have a better view */ 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select multiple name="attendee_information_fields[]" id="attendee_information_fields" class="event-manager-multiselect" data-no_results_text="No results match" attribute="" data-multiple_text="Select Some Options"> 
 
     <option value="full-name">Full name</option> 
 
     <option value="email-address">Email address</option> 
 
     <option value="phone">Phone</option> 
 
     <option value="location">Location</option> 
 
     <option value="gender">Gender</option> 
 
     <option value="age">Age</option> 
 
     <option value="terms-conditions">Terms &amp; Conditions</option> 
 
     <option value="become-a-cfp-camper">Become a CFP Camper</option> 
 
</select>

+0

非常感謝您的回答。問題是,我應該在哪裏粘貼這個功能?因爲我不知道從插件生成這個表單的位置,所以我想在functions.php文件中回顯這個(請檢查我的原始文章),但沒有任何反應。任何想法應該在哪裏粘貼此代碼來完成結果?非常感謝 –

+0

@AtharK你使用的是WordPress嗎?如果是這種情況,你不應該修改你的主題的functions.php文件。改用'wp_enqueue_script()'。如果正在動態生成select下拉列表,則可能需要利用事件冒泡,而不是直接綁定change事件偵聽器,即使用'$(document).on('change','#attendee_information_fields',function(){。 ..});'。但是,所有這些都超出了原始問題的範圍,因爲原始問題僅僅是一段帶有不正確邏輯和選擇器的jQuery代碼。 – Terry

+0

是的我正在使用wordpress,我正在使用wp_enqueue_script()。但我不是編碼方面的專家。感謝您的建議,但。你能詳細說明一下在函數內部使用什麼嗎?非常感謝您的幫助。 –

相關問題