ti-enxame.com

Por que não consigo alterar o tipo de um elemento de entrada a ser enviado?

Estou chamando esta função:

function submit_button(button_id){
    $('#' + button_id).attr('type', 'submit');
}

para fazer esse botão digite = enviar em vez de botão .:

<input  name="confirm_button" id="confirm_button" type="button" value="Confirm" class="login_btn" />

e recebo este erro (no firefox):

exceção não capturada: a propriedade type não pode ser alterada

Existe alguma solução alternativa?

23
kmb64
function submit_button(button_id){
    $('#' + button_id).prop('type', 'submit');
}

Esteja ciente de que isso altera o tipo, mas não o valor; portanto, o botão ainda exibirá "confirmar".

Um violino para provar isso: http://jsfiddle.net/qeUxP/

43
adeneo

Por que o jQuery não permite alterar apenas o atributo type?

Porque causa problemas no Internet Explorer .

Mais informações em: alterar o tipo de campo de entrada com jQuery

"Diretamente da fonte jQuery":

// We can't allow the type property to be changed (since it causes problems in IE)
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
    throw "type property can't be changed";
14
J. Bruni

Finalmente funcionou, tente encontrar o seguinte:

   $("#confirm_button").each(function () 
   { this.type = "number"; });
5
Basem Sayej

Aqui está uma solução alternativa:

$('<input name="confirm_button" id="confirm_button2" type="submit" value="Confirm" class="login_btn" />').insertAfter('#confirm_button');
$('#confirm_button').remove();
4
Candide

Por que não vincular o evento click e chamar o formulário no seu manipulador de cliques?

3
davidethell

javascript:

function submit_button(){

      var btn=document.getElementById('button_id');
      btn.setAttribute('type', 'submit');

  }

==================================================== ====================

Jquery:

function submit_button(){

 $('#' + button_id).prop('type', 'submit');

   }

==================================================== ====================

2
saidesh kilaru

A solução alternativa é criar um elemento do tipo correto e substituir o existente.

No entanto, no seu exemplo, um elemento <button> Poderia servir para enviar o formulário, renderizar como um botão e não exigir nenhum javascript para fazê-lo, por exemplo:

<button name="confirm_button" id="confirm_button" type="input" value="Confirm" class="login_btn" disabled />

E então, para ativar o botão novamente:

$('confirm_button').removeAttr('disabled');
0
Rich O'Kelly