2010-08-16 8 views
2

J'ai le code HTML suivantVérifiez si le champ du sélecteur de personnes est vide avec 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> 

et je suis en train de vérifier si les gens champ sélecteur a une valeur du tout, mais je ne suis pas à travailler (ne peut pas utiliser l'attribut ID pour trouver l'élément), Je ne suis pas sûr de quel élément vérifier.

Le code actuel que j'ai est:

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

et ici je veux ajouter quelque chose comme , sélectionnez [title = Priorité stratégique], textarea.ms-entrée »), mais cela ne fonctionne pas, toutes les idées

Merci à l'avance

Edit:?. le code de validation est:

//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: Je suppose que cela ne fonctionne pas parce que les autres contrôles ont un attribut de valeur. Si j'insère quelque chose dans les champs de date ils obtiennent l'attribut value = "18/08/2010" par exemple. Mais avec le textarea le html ressemble à des valeurs (simplifiées) ici alors comment puis-je vérifier si c'est vide ou non?

EDIT3:

Je changé

return (controlsPassed == 5); 

à

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

Mais si le sélecteur de personnes est caché (.hide()), il veut encore valider si je pensais que je pourrait faire quelque chose comme:

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

mais non, des idées? }

Répondre

0

Votre idée d'ajouter textarea.ms-input est correcte - cela entraînera des modifications de la valeur de la zone de texte pour qu'elle soit exécutée via la méthode checkControls(). Cependant, puisque c'est la seule méthode invoquée dans votre gestionnaire de changement, vous devrez effectuer la vérification vide dans cette méthode, ou juste avant de l'appeler.

Vous pouvez voir comment vous pouvez vérifier une zone de texte vide dans ce simple example:

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

Salut Pat, mis à jour mon exemple un peu maintenant. – Peter

0

Si votre PeopleEditor a un ID de UserField alors le code ci-dessous doit être en mesure de sélectionner la zone de texte pour vous.

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

Et cet extrait ci-dessous serait ce que vous auriez dans votre code:

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

Pour une raison qui ne fonctionne pas, la page est toujours rechargée. – Peter

+0

Essayez-vous d'empêcher le PeopleEditor de poster automatiquement? Je ne comprends pas pourquoi vous avez dit "la page est toujours rechargée". Il existe un attribut AutoPostBack sur le contrôle PeopleEditor et la définition d'un false arrêterait la publication automatique. HTH. –

+0

Désolé, j'étais un peu flou là-bas. La page est rechargée lorsque l'utilisateur clique sur le bouton Envoyer, même si le champ de sélection de personnes est vide. – Peter

0

Les personnes picker premières stocke la valeur dans le champ caché qui a un id comme id Userfield + « hiddenSpanData » .

Si vous cochez cette case, vous saurez si le champ est vide ou non.

par exemple.

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; 
     } 
Questions connexes