2012-02-04 165 views
2

可能重复:
changing password field to text with checkbox with jquery为什么这段代码不工作?

的代码应该检查是否复选框被选中,然后从密码的密码字段更改为普通文字,反之亦然。

$('#cpassword_lf').change(function(){ 
    if($('#cpassword_lf').is(':checked')) 
    { 
     $('#password_loginform').attr('type', 'text'); 
    } 
    else 
    { 
     $('#password_loginform').attr('type', 'password'); 
    } 
}); 
+0

需要更多信息!浏览器,错误等 – epascarello 2012-02-04 23:48:57

回答

6

你不允许更改type属性,这里是一个简单的解决方案,虽然做同样的事情:http://jsfiddle.net/ryWgY/2

HTML:

<input type="checkbox" id="cpassword_lf" /> 
<input type="password" id="password_loginform_hidden" /> 
<input type="text" id="password_loginform_clear" /> 

的Javascript:

$(function() 
{ 
    $('#password_loginform_clear').hide(); 
    $('#cpassword_lf').change(function() 
    { 
     if(!$('#cpassword_lf').is(':checked')) 
     { 
      $('#password_loginform_clear').hide(); 
      $('#password_loginform_hidden').show(); 

      $('#password_loginform_hidden').val($('#password_loginform_clear').val()); 
      $('#password_loginform_clear').val(''); 
     } 
     else 
     { 
      $('#password_loginform_clear').show(); 
      $('#password_loginform_hidden').hide(); 

      $('#password_loginform_clear').val($('#password_loginform_hidden').val()); 
      $('#password_loginform_hidden').val(''); 
     } 
    }); 
}); 
+0

编辑包含代码,谢谢提醒。祝愿SO有一个类似的解决方案jsfiddle(太好了!) – Ben 2012-02-05 00:01:29

+1

谢谢!对此,我真的非常感激。 – 2012-02-05 00:05:50

2

从jQuery文档上attr

jQuery的禁止改变一个或 元素的类型属性,并会在所有浏览器抛出一个错误。这是因为无法在Internet Explorer中更改 类型属性。

查看关于此问题的各种解决方案的链接问题。

作为一个侧面说明,事件处理this将参考已更改的元素,所以你并不需要再次使用选择内:

$("#someElem").change(function() { 
    //$(this) == $("#someElem") 
}); 
0

而不是.attr尝试使用.prop

$('#cpassword_lf').change(function(){ 
    if($(this).is(':checked')) 
     $('#password_loginform').prop('type', 'text'); 
    else 
     $('#password_loginform').prop('type', 'password');  
}); 

不知道什么downvote约为:http://jsfiddle.net/vol7ron/qMhug/ 似乎在Chrome中,FF和Safari的工作(在IE ATM不能测试)

+1

不解决问题(请参阅其他答案),并且应该注意,使用'attr'代替'prop'只是jQuery 1.6及更高版本中的一个问题。 – Sparky 2012-02-04 23:57:16

+0

我不知道,在Safari和Chrome中为我工作:http://jsfiddle.net/vol7ron/qMhug/ – vol7ron 2012-02-05 00:04:12

+0

根据詹姆斯的回答,这确实是一个资源管理器的问题。 – Sparky 2012-02-05 00:06:09

-1

正如其他人所说:这几乎是jQuery: Change element type from hidden to input的重复。

将这个问题的答案应用于您的具体情况,您最终得到这个结果。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('#cpassword_lf').change(function(){ 
    var pass_or_text_input = $('#password_loginform'); 
    var marker = $('<span />').insertBefore(pass_or_text_input); 
    pass_or_text_input.detach(); 
    if ($('#cpassword_lf').is(':checked')) { 
     pass_or_text_input.attr('type', 'text'); 
    } else { 
     pass_or_text_input.attr('type', 'password'); 
    } 
    pass_or_text_input.insertAfter(marker); 
    marker.remove(); 
    }); 
}); 
</script> 
<input id="cpassword_lf" type="checkbox"></input> 
<input id="password_loginform" value="secret"></input> 
+0

正如其他人已经指出的那样,jQuery不允许你因为Explorer的问题而改变'type'属性。 – Sparky 2012-02-05 00:00:41

+0

@ Sparky672:这段代码在IE9中不起作用,但它适用于FF和Chrome,所以我觉得值得一提。 – Grilse 2012-02-05 00:04:35

+0

欢迎来到SO ...哪里不是一切都值得一提(作为答案)。 – Sparky 2012-02-05 00:08:00