javascript
  • jquery
  • 2016-07-25 129 views 3 likes 
    3

    我有两个jQuery选择器,我没有找到第三个“蛮力”方法所需的选项。我完全丧失了原因。每个看起来像他们应该和我验证文件已完全加载时,选择器运行。我在选择器中尝试了每个值和文本,并在我的页面中获得了相同的结果。JQuery Selector无法正常工作,循环会执行。为什么?

    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> 
    
    的HTML是使用以下的jquery负载方法(其中theType是从一个html来的值选择控制),以及在相关联的JavaScript动态加载

    第一选择语句:

    $("#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有关吗?

    回答

    5

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

    +0

    我没有使用选择选项[文本=“”]与相同的结果。你是说这个工作应该或者由于处理这些功能的方式在这种情况下不起作用? – Jim

    +0

    属性选择器语法对于实际属性确实是** only **; 'text'不是一个属性。 – Pointy

    +0

    我更新了我的代码,以便在为select生成选项并且选择器现在可以工作时包含value属性。谢谢你回答,并明确表示。 – Jim

    1

    要继续@Pointy上面所说的,你应该试试:contains代替。

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

    我的想法也是最初的,但是这些值是动态的,并且有可能将字符串嵌入到多个值中,因此使用等号匹配。 – Jim

    2

    您应该使用选择.val(string)功能选择option,它将如果可供选择有value属性找到option匹配字符串。

    所以,你的选择应包含属性,它是在你的情况下,如丢失:

    $(function(){ 
     
        $("#userEducationDegree").val('A'); 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <select type="text" class="form-control" placeholder="Degree..." id="userEducationDegree"> 
     
          <option value="-1">--Select--</option> 
     
          <option value="A">A</option> 
     
          <option value="B">B</option> 
     
          <option value="C">C</option> 
     
    </select>

    相关问题