Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';这段代码jquery不工作吗?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么不是';这段代码jquery不工作吗?

Javascript 为什么不是';这段代码jquery不工作吗?,javascript,jquery,Javascript,Jquery,可能重复: 代码应该检查复选框是否被选中,然后将密码字段从password更改为常规文本,反之亦然 $('#cpassword_lf').change(function(){ if($('#cpassword_lf').is(':checked')) { $('#password_loginform').attr('type', 'text'); } else { $('#password_loginform

可能重复:

代码应该检查复选框是否被选中,然后将密码字段从password更改为常规文本,反之亦然

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

出于安全原因,浏览器通常不允许您更改输入的类型。以下是一些建议的解决方案:


来自jQuery文档中关于:

jQuery禁止更改或上的类型属性 元素,并将在所有浏览器中引发错误。这是因为 无法在Internet Explorer中更改类型属性

有关此问题的各种解决方案,请参见链接问题

作为旁注,在事件处理程序
中,该
将引用已更改的元素,因此无需再次使用选择器:

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

您不允许更改type属性,但以下是一个简单的解决方案,可以执行相同的操作:

HTML:


尝试使用
.prop

$('#cpassword_lf').change(function(){
   if($(this).is(':checked'))
      $('#password_loginform').prop('type', 'text');
   else
      $('#password_loginform').prop('type', 'password');    
});
不确定否决票是关于什么的:
似乎在Chrome、FF和Safari中工作(无法在IE atm中测试)

正如其他人所说:这几乎是一个复制品

把这个问题的答案应用到你的具体案例中,你最终会得到这个答案

<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>

$(函数(){
$('#cpassword_lf')。更改(函数(){
var pass_或_text_input=$(“#密码_登录信息”);
var marker=$('').insertBefore(传递或文本输入);
传递或传递文本输入。分离();
如果($('cpassword'u lf')。是(':checked')){
传递或传递文本输入.attr('type','text');
}否则{
传递或传递文本输入.attr('type','password');
}
传递或传递文本输入。插入后面(标记);
marker.remove();
});
});

需要更多信息!浏览器、错误等并不能解决这个问题(参见其他答案),应该注意的是,使用
attr
代替
prop
只是jQuery 1.6及以上版本中的一个问题。我不知道,在Safari和Chrome中对我有效:根据James的回答,这确实是一个资源管理器问题。他说得对,但是attr和prop不一样-我没有在每个浏览器中都遇到错误-你能帮我测试IE吗?在IE 8中,我遇到了一个jQuery错误,“无法获取类型属性。不支持此命令。”正如其他人所说,由于资源管理器存在问题,jQuery将不允许您更改
类型
属性。@Sparky672:此代码段在IE9中不起作用,但在FF和Chrome中起作用,因此我认为值得一提。欢迎来到so。。。并非所有内容都值得一提(作为答案)。编辑后包含代码,谢谢提醒。希望有一个类似于JSFIDLE的解决方案(太好了!)谢谢!我真的很感激。
$('#cpassword_lf').change(function(){
   if($(this).is(':checked'))
      $('#password_loginform').prop('type', 'text');
   else
      $('#password_loginform').prop('type', 'password');    
});
<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>