Javascript jQuery使另一个脚本出错

Javascript jQuery使另一个脚本出错,javascript,jquery,Javascript,Jquery,我试着建立一个无线电搜索框,通过一点搜索,我找到了我要找的东西。我试图让按钮看起来像开关,所以我遇到了!我喜欢它。这就是我要找的。但是,一旦我添加了jQuery,整个搜索过程就不再有效了。老实说,我不知道为什么。以下是带有jQuery的HTML: <html> <head> <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' type='text/javascri

我试着建立一个无线电搜索框,通过一点搜索,我找到了我要找的东西。我试图让按钮看起来像开关,所以我遇到了!我喜欢它。这就是我要找的。但是,一旦我添加了jQuery,整个搜索过程就不再有效了。老实说,我不知道为什么。以下是带有jQuery的HTML:

<html>
<head>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' type='text/javascript'/>
<script type="text/javascript">
function dosearch() {
  var sf=document.searchform;
  for (i=sf.sengines.length-1; i > -1; i--) {
    if (sf.sengines[i].checked) {
      var submitto = sf.sengines[i].value + escape(sf.searchterms.value);
    }
  }
  window.location.href = submitto;
  return false;
}
</script>
<script type="text/javascript">
$('#sites input:radio').addClass('input_hidden');
$('#sites label').click(function() {
    $(this).addClass('selected').siblings().removeClass('selected');
})
</script>
<style>
.input_hidden {
    position: absolute;
    left: -9999px;
}
.selected {
    background-color: #ccc;
}
#sites label {
    display: inline-block;
    cursor: pointer;
}
#sites label:hover {
    background-color: #efefef;
}
#sites label img {
    padding: 3px;

}
</style>
</head>
<body>
<div id="sites">
<form name="searchform" onSubmit="return dosearch();">
<input id='first' name="sengines" type="radio" checked='checked' value="http://myurl.com/search?q="/><label for="first"><img src="http://sstatic.net/serverfault/img/favicon.ico" alt="Server Fault" /></label>
<input id='req' name="sengines" type="radio" value="http://www.myotherurl.com/search?q="/><label for="req"><img src="http://sstatic.net/superuser/img/favicon.ico" alt="Super User" /></label>
<input type="text" name="searchterms"/>
</form></div>
</body>
</html>

函数dosearch(){
var sf=document.searchform;
对于(i=sf.sengines.length-1;i>-1;i--){
if(sf.sengines[i].选中){
var submitto=sf.sengines[i].value+escape(sf.searchterms.value);
}
}
window.location.href=submitto;
返回false;
}
$('#站点输入:radio').addClass('input#u hidden');
$(“#站点标签”)。单击(函数(){
$(this).addClass('selected').sides().removeClass('selected');
})
.input_隐藏{
位置:绝对位置;
左:-9999px;
}
.选定{
背景色:#ccc;
}
#站点标签{
显示:内联块;
光标:指针;
}
#站点标签:悬停{
背景色:#EFEF;
}
#站点标签img{
填充:3倍;
}
删除jQuery,该函数将正常工作。
jQuery非常关键,我不能从代码中删除它。原始网页的其他部分正在大量使用它

按原样从小提琴上复制并粘贴代码。但是,由于将单独的HTML、JS和CSS部分放在一起,您错过了一个重要部分:在DOM完全加载时实际实例化要执行的jQuery部分

在小提琴中,小提琴为您提供:

<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){
$('#sites input:radio').addClass('input_hidden');
$('#sites label').click(function() {
    $(this).addClass('selected').siblings().removeClass('selected');
});
});//]]>    
</script>
//
更新:此外,在包含jQuery时,您没有正确关闭脚本标记。这就破坏了jqueryinclude之后脚本标记中代码的功能

应为

下面是一个现在可以完全工作的版本:

<!doctype html>
<html>
<head>
  <style>
    .input_hidden {position: absolute; left: -9999px;}
    .selected {background-color: #ccc;}
    #sites label {display: inline-block; cursor: pointer;}
    #sites label:hover {background-color: #efefef;}
    #sites label img {padding: 3px;}
  </style>
</head>
<body>
  <div id="sites">
    <form name="searchform" id="s">
      <input id='first' name="sengines" type="radio" checked='checked' value="http://myurl.com/search?q=">
      <label for="first" class="selected"><img src="//sstatic.net/serverfault/img/favicon.ico" alt="Server Fault"></label>
      <input id='req' name="sengines" type="radio" value="http://www.myotherurl.com/search?q=">
      <label for="req"><img src="//sstatic.net/superuser/img/favicon.ico" alt="Super User"></label>
      <input type="text" name="searchterms" id="searchterms">
    </form>
  </div>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  <script>
  $().ready(function() {
    $('#sites input:radio').addClass('input_hidden');
    $('#sites label').click(function() {
      $(this).addClass('selected').siblings().removeClass('selected');
    });
    $('#s').submit(function(e) {
      e.preventDefault();
      window.location.href = $(this).find(':checked').val() + $('#searchterms').val();
      return !0;
    });
  });
  </script>
</body>
</html>

.input_hidden{位置:绝对;左:-999px;}
.所选{背景色:#ccc;}
#站点标签{显示:内联块;光标:指针;}
#站点标签:悬停{背景色:#efefef;}
#站点标签img{padding:3px;}
$().ready(函数()){
$('#站点输入:radio').addClass('input#u hidden');
$(“#站点标签”)。单击(函数(){
$(this).addClass('selected').sides().removeClass('selected');
});
$('s')。提交(功能(e){
e、 预防默认值();
window.location.href=$(this.find(':checked').val()+$('#searchterms').val();
返回!0;
});
});

您链接到的JSFIDLE已经包含了jQuery,但是是一个旧版本-您确定在代码中没有重复执行两次吗?
(var i;…
-使用
var
初始化
i
!您看过javascript控制台了吗?如果它不工作,可能是您的复制和粘贴出错。在这种情况下,JS控制台不会提示错误。没有错误!唯一的错误是他忘记了实际实例化要执行的jQuery部分当DOM完全加载时(或者,如您所说,复制+粘贴时出错)。@Tomas Lycken,我尝试了最新版本和旧版本。它们都不起作用。因此我决定坚持使用1.7.2,它在主网页上使用。@Tomas Zato.trued,不起作用。无论如何,谢谢您^^^解决了添加类的问题。但仍然如此“window.location.href”这东西不起作用。无论如何谢谢你^^^知道了。你忘了关闭jQuery脚本标记,因此破坏了JS部分的功能。请参阅我的更新答案,以获得一个完全有效的代码版本。你是最吸引人的人(:非常感谢^^^^)