2010-08-16 104 views
2

我有以下的HTML用jQuery检查人员选择器字段是否为空?

<tr> 
<td> 
<div id="ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_upLevelDiv" TabIndex="0" onFocusIn="this._fFocus=1;saveOldEntities('ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_upLevelDiv')" onClick="onClickRw(true, true);" onChange="updateControlValue('ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField')" onFocusOut="this._fFocus=0;" onPaste="dopaste();" AutoPostBack="0" class="ms-inputuserfield" onDragStart="canEvt(event);" onKeyup="return onKeyUpRw('ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField');" onCopy="docopy();" onBlur="updateControlValue('ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField')" Title="People Picker" onKeyDown="return onKeyDownRw(this, 'ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField', 3, true, event);" contentEditable="true" style="width: 100%; word-wrap: break-work;overflow-x: hidden; background-color: window; color: windowtext;" name="upLevelDiv"> 
</div> 
<textarea name="ctl00$m$g_c6ae303a_6013_4adb_8057_63a214bcfd24$ctl00$ctl04$ctl08$ctl00$ctl00$ctl04$ctl00$ctl00$UserField$downlevelTextBox" rows="1" cols="20" id="ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_downlevelTextBox" class="ms-input" onKeyDown="return onKeyDownRw(this, 'ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField', 3, true, event);" onKeyUp="onKeyUpRw('ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField');" Title="People Picker" AutoPostBack="0" style="width:100%;display: none;position: absolute; "> 
</textarea></td> 
          </tr> 

,我试图来检查人们是否选取器场在所有任意值,但我不明白它的工作(不能使用ID属性来查找元素),我不确定要检查哪个元素。

当前的代码我已经是:

$("input[title=Target Date],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic Priority]").change(function(){ 
     checkControls() 
}); 

,在这里我想补充一点像 ,选择[标题=战略重点],textarea.ms输入“),但它不工作,任何想法

在此先感谢

编辑:用于验证的代码是:

//bind a change event to all controls to validate 
    $("input[title=Target Date],input[title=Start Date],select[title=Strategic Objective],textarea[id$=_UserField_downlevelTextBox],select[title=Strategic 

Priority]").change(function(){ 
     checkControls() 
    }); 

    //the change event function - check the status of each control 
    function checkControls(){ 

    //set a variable to count the number of valid controls 
    var controlsPassed = 0; 

    //set up a selector to pick .each() of the target controls 
    $("input[title=Target Date],input[title=Start Date],select[title=Strategic Objective],textarea[id$=_UserField_downlevelTextBox],select[title=Strategic 

Priority]").each(function(){ 

     //if the control value is not zero AND is not zero-length 
     var val = $(this).val(); 
     if($(this).is(':hidden') || (val != 0 && val.length != 0)) { 

      //add one to the counter 
      controlsPassed += 1; 

     } 
     }); 

    //call the PreSaveItem function and pass the true/false statement of 5 valid controls 
    return (controlsPassed == 5); 

    } 

     function PreSaveItem() { 
      return checkControls() 
    } 

edit2:我想这不起作用,因为其他控件有一个值属性。例如,如果我在日期字段中插入某些内容,它们将获得属性值=“18/08/2010”。但是,textarea的html看起来像(简化的)值,所以如何检查它是否为空?

EDIT3:

我改变

return (controlsPassed == 5); 

return (controlsPassed == 4) && (($("textarea[title='People Picker'][value!='']").length==1) || $("textarea[title='People Picker'][value!='']").is(":hidden")); 

但是如果人员选取器是隐藏的(.hide()),它仍然要验证它,所以我想我可以这样做:

if ($("textarea[title='People Picker'][value!='']").is(":hidden")) { 
    return (controlsPassed == 4) 
} 
else { 
return (controlsPassed == 4) && (($("textarea[title='People Picker'][value!='']").length==1); 

但没有,有什么想法? }

回答

0

您的想法是添加textarea.ms-input是正确的 - 这将导致textarea的值更改为通过checkControls()方法运行。但是,由于这是在您的更改处理程序中调用的唯一方法,因此您必须在该方法中执行空检查,或者在调用它之前执行空检查。

你可以看到你怎么会在这simple example检查空textarea的:

$('textarea.ms-input').change(function(){ 
    if($.trim(this.value) == ''){ 
     alert("Look maw, no content!"); 
    } 
}); 
+0

喜八,现在有点更新我的例子。 – Peter 2010-08-18 00:44:12

0

如果你的PeopleEditorUserField一个ID,然后在下面的代码应该能够选择文本区域为您服务。

$(textarea['id$=_UserField_downlevelTextBox']) 

低于这个片段将是你会在你的代码是什么:

$(textarea['id$=_UserField_downlevelTextBox']).change(function(){ 
     checkControls(); 
}); 
+0

由于某些原因无效,页面仍然重新加载。 – Peter 2010-08-16 13:11:59

+0

您是否试图阻止PeopleEditor自动回复?我不明白你为什么说“该页面仍然被重新加载”。 PeopleEditor控件上有一个AutoPostBack属性,并将其设置为false将会停止自动回发。 HTH。 – 2010-08-17 00:54:55

+0

对不起,我有点不清楚。即使人员选择器字段为空,该页面也会在用户点击提交按钮时重新引用。 – Peter 2010-08-17 23:21:20

0

人员选取第一家门店具有id作为Userfield +“hiddenSpanData”的ID在隐藏字段中的值。

选中此项可以让您知道该字段是否为空。

例如

if($.trim($('input[id$="ff161_ctl00_ctl00_UserField_hiddenSpanData"]').val()) == ""){ 
    return 'Please enter user name'; 
} 
0
var user = $("#" + '<%= this.MyPPEControl1.ClientID %>').text();  
     var IsValidUser = user.search("@"); 
     if (IsValidUser > 0) 
     { 
      $('#' + '<%= this.MyPPEControl1.ClientID %>').css({"border": "", "background": "" }); 
     } 
     else 
     { 
      $('#' + '<%= this.MyPPEControl1.ClientID %>').css({ "border": "1px solid red", "background": "#FFCECE" 
      });  
     return false; 
     }