使用endsWith元素测试字段的值

时间:2011-12-30 16:02:22

标签: jquery jquery-selectors

我有一个SharePoint编辑表单,我希望将其中一个Y / N字段设置为只读。此字段切换两个其他字段的可见性。 我已将只读转换为绑定标签字段。如果以“_ff5_1”结尾的此字段的值为“是”,那么我希望隐藏两个切换的字段,如果没有,则显示它们。

这是我第一次尝试的代码

if ($("span[id$=_ff5_1]").val() == "Yes") {    
    $("tr.anon").hide(); 
} else {
    $("tr.anon").show();
}

我以为我可能会尝试使用上面的代码一次做太多,所以我将其修改为以下

$("span[id$='_ff5_1']") //select element
   if $(this).val() ==='Yes' { //test val
      $("tr.anon").hide(); // hide name & email rows
} else {
      $("tr.anon").show();
}

但是,如果基于Y / N字段的值,似乎都不会隐藏行。

UPDATE1 @Nicola:我尝试了你的建议,但没有用。我相信问题是该字段($(“span [id $ ='_ ff5_1']”))不再是输入字段 - 我已将其转换为标签字段以使其为只读。

$("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
        if (this.value == "Yes") { //test value 
            $("tr.anon").hide(); 
        } else {
            $("tr.anon").show();
        }   
     });

另外,我相信我试图隐藏的字段不是标签字段的父项,而是标签字段的子项。

感谢您的反馈。

UPDATE2: 这是绑定标签的src代码和我希望基于的切换可见性的两个文本字段。

<tr>
    <td width="190px" valign="top" class="ms-formlabel"><H3 class="ms-standardheader">Anonymous</H3></td>
    <td width="400px" valign="top" class="ms-formbody">
       <span id="ctl00_m_g_e959bdad_1c52_41a7_b23f_564bc84c2497_ff5_1">Yes</span>
       <br>Would you like to remain anonymous?</td>
</tr>
<tr class="anon">
    <td width="190px" valign="top" class="ms-formlabel"><H3 class="ms-standardheader">Name</H3></td>
    <td width="400px" valign="top" class="ms-formbody">
       <span dir="none"><input name="ctl00$m$g_e959bdad_1c52_41a7_b23f_564bc84c2497$ff6_1$ctl00$ctl00$TextField" type="text" maxlength="255" id="ctl00_m_g_e959bdad_1c52_41a7_b23f_564bc84c2497_ff6_1_ctl00_ctl00_TextField" title="name" class="ms-long" /><br></span></td>
</tr>
<tr class="anon">
    <td width="190px" valign="top" class="ms-formlabel"><H3 class="ms-standardheader">Email</H3></td>
    <td width="400px" valign="top" class="ms-formbody">
       <span dir="none"><input name="ctl00$m$g_e959bdad_1c52_41a7_b23f_564bc84c2497$ff7_1$ctl00$ctl00$TextField" type="text" maxlength="255" id="ctl00_m_g_e959bdad_1c52_41a7_b23f_564bc84c2497_ff7_1_ctl00_ctl00_TextField" title="email" class="ms-long" /><br></span></td>
</tr>

UPDATE3:Val()只应用于获取输入元素的值。 B / c我已将我的输入元素转换为标签,我应该使用.text()。 http://api.jquery.com/text/

最终更新:

$("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
  if ($(this).text() == "Yes") { //test value returned from non-input field 
      $("tr.anon").hide(); 
  } else {
      $("tr.anon").show();
  } 
});

1 个答案:

答案 0 :(得分:2)

也许你应该做像

这样的事情
$("span[id$=_ff5_1]").each(function(){
  if (this.value == "Yes") {    
    $(this).closest("tr").find('.anon').hide(); 
  } else {
    $(this).closest("tr").find('.anon').show();
  }
});

你必须做这样的事情,因为$("span[id$=_ff5_1]")会返回一个elemens的集合,你必须对它们进行迭代。 然后我得到了最近的<tr>元素,它是当前输入元素的父元素,并隐藏/显示类anon的元素,坚果也许你需要不同的东西