2010-08-16 6 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 == 4) && (($("textarea[title='People Picker'][value!='']").length==1) || $("textarea[title='People Picker'][value!='']").is(":hidden")); 

return (controlsPassed == 5); 

을 변경하지만 사용자 선택이 숨겨져있는 경우 (.hide는())는 여전히 그렇게 생각 확인하고 싶어 I 다음과 같이 할 수 있습니다.

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

하지만 아니, 어떤 아이디어? textarea.ms-input를 추가 }

답변

0

당신의 생각은 정확 - 텍스트 영역의 값에 변화가 checkControls() 방법으로 실행되도록 (듯이) 것이다. 그러나 그것은 변경 핸들러에서 호출되는 유일한 메소드이므로 해당 메소드에서 빈 체크를 수행하거나 호출하기 직전에 수행해야합니다.

당신은 당신이 simple example에 빈 텍스트 영역을 확인 수있는 방법을 볼 수 있습니다 당신의 PeopleEditorUserField의 ID가

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

안녕 팻, 조금 지금 내 예를 업데이트했습니다. – Peter

0

경우 아래의 코드는 당신을위한 텍스트 영역을 선택할 수 있어야합니다.

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

그리고 아래의이 조각은 코드에서했을 것 같습니다

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

그래도 작동하지 않는 이유로 페이지가 다시로드됩니다. – Peter

+0

PeopleEditor가 자동으로 게시를 중지하려고합니까? 나는 왜 당신이 "그 페이지는 여전히 새로 고침을 받았다"고 말했는지 이해하지 못합니다. PeopleEditor 컨트롤에 AutoPostBack 특성이 있고 false로 설정하면 자동 게시가 중지됩니다. HTH. –

+0

죄송합니다. 약간 불명했습니다. 사용자 선택 도구 필드가 비어 있더라도 사용자가 제출 단추를 누르면 페이지가 다시로드됩니다. – Peter

0

사람들은 첫 번째 매장 Userfield + "hiddenSpanData"의 ID와 같은 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; 
     } 
관련 문제