2

我有一个动态生成的下拉列表,我需要使用 Jquery 更改选定的值。

<select class="txtfield country" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country"> 
    <option value="FJ">FIDJI</option>
    <option value="FI">FINLANDE</option>
    <option value="FR" selected="selected">FRANCE METROPOLITAINE</option>
    <option value="GA">GABON</option>
</select>

一种方法是使用下拉列表的整个 ID(包括 ctl00..):

$j("#ctl00_MainContentAreaPlaceHolder_DeliveryPersonalInformation_country option[value='FR']").attr('selected', 'selected'); 

有没有办法使用 CSS 我可以找到元素并更改值,因为我不喜欢使用动态控件的 ID?

编辑 :

我忘了提到我在页面上有 2 个具有相同下拉名称的自定义控件。

所以自定义控件1生成:

<select class="txtfield ckgcountry" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country">  ...
    <option value="ZW">ZIMBABWE</option>
</select>

和客户控制 2 生成:

<select class="txtfield country" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country">
    <option value="FJ">FIDJI</option>
    <option value="FI">FINLANDE</option>
    <option value="FR" selected="selected">FRANCE METROPOLITAINE</option>
    <option value="GA">GABON</option>
</select>

因此,使用代码它只更改它在 DOM 中找到的第一个名称的值,我如何更改第二个名称的值...有没有办法使用 CSS 来做到这一点?

4

3 回答 3

6

看起来您正在使用 ASP.NET。

使用完整的 ASP.NET 控件 ID(渲染后)确实不可靠,因为它可能会在某些时候发生变化。ID 中唯一保证不会更改的部分是在 ASP.NET 控件的 ID 属性中定义的 ID 的最后一部分。

使用通配符选择器选择该项目

// Unselect the currently selected item
$("select[id$='personalInformation_country'] option:selected").removeAttr("selected");

// Select the option at index 0
$("select[id$='personalInformation_country'] option:eq(0)").attr("selected","selected");

或者

// Select the option with value FR
$("select[id$='personalInformation_country'] option[value='FR']").attr("selected","selected");

$='personalInformation_country'匹配所有以“personalInformation_country”结尾的 ID,它应该只有一个!

于 2009-12-07T15:41:00.053 回答
0

你的意思是这样吗?

$('select.country').val('FR');

这将为所有具有 CSS 类“国家”的选择元素设置选择

如果您想更好地精确定位选择,您需要使用 ID/名称或确保它以您可以确定它可以被定位的方式嵌套。

例如

$('form[name=myForm] select.country').val('FR');//presuming there is only one
于 2009-12-07T15:36:34.673 回答
0

如果没有看到页面上的其余标记,很难判断,但是您需要确保唯一性,以便获得正确的选择元素,因此 id 通常是最好的选择。

如果您可以使用确切的 ID,因为它具有最好的性能,但是您要求提供选项,所以它就可以了。

几个选项:

$('select.txtfield')将找到所有带有类 txtfield 的选择,因此可能不是唯一的。

一个更好的赌注可能$('select.txtfield.country')是我认为是独一无二的?

或者网络表单的“hack”是使用 end-with 选择器

$('select[id$=personalInformation_country]')
于 2009-12-07T15:37:13.667 回答