JQuery Selector无法正常工作,循环可以。为什么呢?

时间:2016-07-25 17:28:15

标签: javascript jquery

我有两个jquery选择器,我使用的没有找到所需的选项,第三个"暴力"方法做了。我完全失去了原因。每个看起来都应该是这样,我验证了文件在选择器运行时已满载。我在选择器中尝试了每个值和文本,并在我的页面中得到了相同的结果。使用下面的jquery加载方法动态加载html(其中theType是来自html选择控件的值)以及相关的javascript:

var theType = $('#TicketType option:selected').val();
var theId =  $("#Id").val();
var url = '/SystemBuildSiteConfigs/' + theType + '/' + theId;

$('#ticketDiv').html("");

$("#ticketDiv").load(url, function (response, status, xhr) {
    if (status == "error") {
        alert("There was an error loading the " + theType + " form");
    }
    else {
        $.getScript("/Scripts/SiteConfig" + theType + ".js", function () {
        });
    }
});

有问题的html选择:

<select name="SupportOrganization" class="form-control" id="SupportOrganization">
    <option value="">- Please Select -</option>
    <option>Auxiliary IT</option>
    <option>Business Intelligence</option>
    <option>Change Management</option>
    <option>Engineering RnD</option>
    <option>Enterprise Business Solutions</option>
    <option>Enterprise Solutions</option>
    <option selected="selected">Hosting</option>
    <option>Infrastructure and Operations</option>
    <option>Manufacturing</option>
    <option>Professional</option>
    <option>Support</option>
</select>

第一个选择语句:

$("#SupportOrganization").find('option[value="' + jsonObj.SupportOrganization + '"]').attr("selected", true);

第二个选择语句:

$('#SupportOrganization option[value="' + jsonObj.SupportOrganization + '"]').attr("selected", true);

什么有效:

$('#SupportOrganization option').each(function (idx, ele) {
    if ($(ele).val() == jsonObj.SupportOrganization)
        $(ele).attr("selected", true);
});

页面段正确加载,并且所有其他启动内容的html加载的javascript控件都按预期执行。另一种页面类型加载并触发正确执行类似功能。使用jsfiddle,两个选择器都显示它们正常工作。我通过测试发现的是

  • 变量确实具有预期值。
  • 文本选择器在我的页面上无法正常工作
  • 值选择器确实选择了一个对象。但是我无法确定对象是什么,并且attr()方法没有设置目标属性值。

我可以使用我发现的可行的方法,只是想知道为什么这不起作用。猜测它与动态加载的html和javascript有关吗?

3 个答案:

答案 0 :(得分:5)

如果缺少“value”属性,jQuery .val()函数会使用<option>元素的“hook”来返回元素的文本内容。您的<option>元素没有“value”属性,因此选择器不匹配。

答案 1 :(得分:2)

您应该使用选择option功能选择.val(string),如果在{{1}的选项中可用,它会找到option 匹配的字符串}属性。

因此,您的选项应包含属性,在您的情况下缺少该属性,例如:

&#13;
&#13;
value
&#13;
$(function(){
   $("#userEducationDegree").val('A');
});
&#13;
&#13;
&#13;

答案 2 :(得分:1)

要继续@Pointy上面所说的,你应该尝试:包含而不是。

$('#SupportOrganization option:contains("' + jsonObj.SupportOrganization + '")').attr("selected", true);