2012-11-26 14 views
28

È necessario rimuovere l'attributo "checked" di una casella di controllo quando si verificano errori.Rimuovi l'attributo "checked" della casella di controllo

La funzione .removeAttr non funziona. Qualche idea? :/

HTML

<div data-role="controlgroup" data-type="horizontal" data-mini="true" style="margin-left: auto; margin-right: auto; width: 100%; text-align: center;"> 
    <input type="checkbox" id="captureImage" name="add_image" class="custom" /> 
    <label for="captureImage" data-icon="checkbox">Image</label> 
    <input type="checkbox" id="captureAudio" name="add_audio" class="custom" /> 
    <label for="captureAudio" data-icon="checkbox">Audio</label> 
    <input type="checkbox" id="captureVideo" name="add_video" class="custom" /> 
    <label for="captureVideo" data-icon="checkbox">Video</label> 
</div> 

Javascript

$("#captureImage").live("change", function() { 
    // $("#captureImage").prop('checked', false); // Here Work 

    if($("#captureImage:checked").val() !== undefined) { 
      navigator.device.capture.captureImage(function(mediaFiles) { 
      console.log("works"); 
     }, function(exception) { 
      $("#captureImage").prop('checked', false); // Not Works Here 
      _callback.error(exception); 
     }, {limit: 1}); 
    } 
}); 

/* 
$("#captureAudio").live("change", function() { 
    if($("#captureAudio:checked").val() !== undefined) { 
      navigator.device.capture.captureAudio(function(mediaFiles) { 
      console.log("audio"); 
     }, function() { 
      $("#captureAudio").removeAttr('checked'); 
      _callback.error; 
     }, {limit: 1}); 
    } 
}); 

$("#captureVideo").live("change", function() { 
    if($("#captureVideo:checked").val() !== undefined) { 
      navigator.device.capture.captureVideo(function(mediaFiles) { 
      console.log("video"); 
     }, function(exception) { 
      $("#captureVideo").prop('checked', false); 
      _callback.error(exception); 
     }, {limit: 1}); 
    } 
}); 
*/ 
+0

$ ("# captureImage: selezionata"). Val() sarà sempre darà val o disattivare valore anche non è stata definita per esso –

+0

@rajeshkakawat No, $ ("#captureImage"). val() è diverso da $ ("# captureImage: checked"). val() – FabianoLothor

+0

Sì, è diverso, ma il condizionale funziona. – FabianoLothor

risposta

-5

Mi dispiace, ho risolto il mio problema con il codice di cui sopra:

$("#captureImage").live("change", function() { 
    if($("#captureImage:checked").val() !== undefined) { 
     navigator.device.capture.captureImage(function(mediaFiles) { 
      console.log("works"); 
     }, function(exception) { 
      $("#captureImage").removeAttr('checked').checkboxradio('refresh'); 
      _callback.error(exception); 
     }, {}); 
    } 
}); 
58

Prova ...

$("#captureAudio").prop('checked', false); 
+0

Non funziona in callback la funzione di errore risolve appena la funzione captureImage. – FabianoLothor

1

Prova:

$("#captureAudio")[0].checked = false; 
+0

Non funziona in richiamata Funzione di errore:/ – FabianoLothor

+0

Suppongo che tu stia sbagliando la condizione. Prova: 'if ($ (" # captureImage ") [0] .checked)'. Evita di usare quegli pseudo-selettori di jQuery (': checked'). – macool

+0

@FabianoLothor evita anche di sollevare eccezioni. Anche qualcosa come 'console.error' potrebbe mandare in crash il tuo codice. (È successo a me) – macool

0

provare qualcosa di simile FIDDLE

try 
     { 
     navigator.device.capture.captureImage(function(mediaFiles) { 
     console.log("works"); 
     }); 
     } 

    catch(err) 
     { 
     alert('hi'); 
     $("#captureImage").prop('checked', false); 

     } 
+0

Ci provo qui, ma non la voce sul catch. :/ – FabianoLothor

5

Provate a controllare

$('#captureImage').attr("checked",true).checkboxradio("refresh"); 

e deselezionare

$('#captureImage').attr("checked",false).checkboxradio("refresh"); 
35

Entrambi dovrebbero funzionare:

$("#captureImage").prop('checked', false); 

E/O

$("#captureImage").removeAttr('checked'); 

... si può provare entrambi insieme.

+0

Solo la seconda opzione ha funzionato per me, ma non so perché. È perché ho impostato l'attributo checked con il metodo attr, come: radio.attr ('checked', 'checked')? –

+0

@ ErikČerpnjak si quindi – itsazzad

+1

** NOTA ** per [.prop ('checked', false) o .removeAttr ('checked')?] (Https://stackoverflow.com/q/6169826/1366033), che * * '.prop (" checked ", false)' ** è sempre preferibile a '.removeAttr (" checked ")' – KyleMit

0

Si potrebbe provare $(this):

$("#captureAudio").live("change", function() { 
    if($(this).val() !== undefined) { /* IF THIS VALUE IS NOT UNDEFINED */ 
      navigator.device.capture.captureAudio(function(mediaFiles) { 
      console.log("audio"); 
     }, function() { 
      $(this).removeAttr('checked'); /* REMOVE checked ATTRIBUTE; */ 
      /* YOU CAN USE `$(this).prop("checked", false);` ALSO */ 
      _callback.error; 
     }, {limit: 1}); 
    } 
}); 
0

utilizzando .removeAttr() su un attributo booleano come checked, selected, o readonly sarebbe anche impostare la proprietà denominata corrispondente a false.

Quindi rimosso questa controllata attributo

$("#IdName option:checked").removeAttr("checked"); 
Problemi correlati