2010-08-16 97 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; 
     }