2013-08-07 8 views
8

Modello:rimuovere proprietà richiesta dal campo di immissione sul modulo di presentare

[Display(Name = "City"] 
[Required] 
[RegularExpression(@"^(?!\d$).*$"] 
[StringLength(20,MinimumLength = 2] 
public string City { get; set; } 

Forma:

@Html.LabelFor(x => x.City, new { @class = "control-label" }) 
@Html.TextBoxFor(x => x.City, new {id="city" }) 

Script:

<script> 
    $(document).ready(function() { 
    $("#identificationForm").submit(function (e) { 
     var required=document.getElementById("city").required; 
     console.log(required); 
     // e.preventDefault(); 
    }); 
    }); 
</script> 

Voglio rimuovere proprietà richiesta se una condizione è soddisfatta . Impossibile fare questo in questo modo. Come posso ottenere questo?

+0

con jQuery: $ ("# nome della città") removeAttr ("necessaria");. oppure usa document.getElementById ("città"). removeAttribute ('richiesto'); – dz15

+0

Stai usando JqueyVal? Se sì, rimuovere la richiesta non è l'unica cosa! – Fals

+0

possibile duplicato di [Come impostare l'attributo richiesto HTML5 in Javascript?] (Http: // stackoverflow.it/questions/18770369/how-to-set-html5-required-attribute-in-javascript) – vaxquis

risposta

23

JavaScript è case sensitive.

Usa

document.getElementById("city").required = false; 

Demonstration

Fate attenzione che il codice non può funzionare come si tenta di accedere all'elemento prima che esista. Mettere lo script dopo l'elemento se non si esegue il codice su un evento:

<input type="text" id="city" required> 
<script> 
if(somecondition is true){ 
    document.getElementById("city").required = false; 
} 
</script> 

Si noti inoltre che non è possibile modificare questo in una funzione di inviare e si aspettano il modulo da presentare perché è troppo tardi: questo gestore di eventi non verrà chiamato se il campo richiesto non è compilato!

+0

Il modulo non si sta ancora inoltrando e lo sto facendo nel modulo invio funzione – user2137186

+0

@ user2137186 ​​Ho modificato la mia risposta per indicare un altro problema . Potrebbe essere rilevante o meno, a seconda di quanto il codice che mostri proviene da ciò che hai realmente. –

+0

Io chiamo quella funzione di script sul modulo invio funzione – user2137186

4

shoud fare questo:

if(somecondition is true) 
{ 
    var city = document.getElementById("city"); 
    city.removeAttribute('required'); 
} 
+0

Il modulo non si sta ancora inviando e lo sto facendo nella funzione di invio modulo – user2137186

+0

Dovresti postare l'intera funzione. – Fals

+0

cosa intendi con questo? – user2137186

9

È possibile utilizzare:

document.getElementById("city").removeAttribute("required"); 

o con jQuery

$('#city').removeAttr('required') 
+0

Il modulo non si sta ancora inviando e lo sto facendo nella forma di invio della funzione – user2137186

+1

Si prega di inviare il resto del codice. – j08691

+0

beh sto usando .net mvc4 ... quindi questo non dovrebbe essere pubblicato qui – user2137186

1

Con il tempo la funzione On Submit è quello di rimuovere l'attributo richiesto, il modulo avrebbe già superato la convalida. Per prima cosa è necessario disabilitare la convalida, quindi sarà possibile inviare il modulo con i campi obbligatori vuoti. Successivamente rimuovere gli attributi richiesti e infine invocare manualmente la convalida tramite $.validator.unubtrusive.parse(form) e questo ora convaliderà il modulo richiamando gli altri tipi di convalida come string length e formatting, tutto il resto tranne gli attributi richiesti. Controlla if form.valid() then submit() else non fare nulla.

0

in PHP è molto facile, questo non convalidare il modulo, mentre la presentazione,

<input type="submit" onclick="return confirm('Are you sure?')" value="Abort Test" formnovalidate> 
0

Non sono sicuro se qualcuno ha trovato un modo migliore per fare questo ancora e potrebbe non essere il modo più efficace per fallo ma potresti usare PHP per fare questo. Se la condizione si sta cercando di soddisfare sia nota prima la pagina viene caricata, allora si può avere questo:

<input type="text" id="city" 

<?php 
    if (condition_is_met) { 
      echo ">"; 
    } else { 
      echo "required>"; 
    } 
?> 
Problemi correlati