【问题标题】:onchange script used in two different functiononchange 脚本用于两个不同的函数
【发布时间】:2014-04-03 01:58:12
【问题描述】:

我这里有两个脚本。第一个用于 XMLHttpRequest 的脚本和另一个用于自动完成的 ajax 函数的脚本。但是当我试图在一页中使用这个脚本时,XMLHttpRequest 不起作用。我的问题之一是如果 XMLHttpRequest 不起作用,另一个也不起作用。任何帮助将不胜感激。

<select name="cat_code" id="cat_code" type="text" onchange="GetChangedValue(this.value)">
</select>

<script type="text/javascript">
function GetChangedValue(str) {
    if (str==""){
        document.getElementById("item_code").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest)   {
        // code for IE7+, Firefox, Chrome, Opera, Safari   
        xmlhttp=new XMLHttpRequest();  
    } else {
        // code for IE6, IE5   
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    } 
    xmlhttp.onreadystatechange=function(){   
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("item_code").value = xmlhttp.responseText;
        }   
    }
    xmlhttp.open("GET","getajax.php?q="+str,true);
    xmlhttp.send();
}
</script>

<script>
  function GetChangedValue (val) {
   $( "#items" ).autocomplete({
        selectFirst: true,
            source: function(request, response) {
    $.getJSON('autocomplete.php?selected='+val, { items: request.term }, response);
  }
    });
}
</script>

【问题讨论】:

  • 你不能有同名的函数
  • @idlerboris 我该怎么办?因为我的两个脚本依赖于具有相同下拉列表的选择值

标签: javascript jquery ajax onchange


【解决方案1】:

您的函数需要有不同的名称。或者您可以在这两种情况下使用带有 jquery 的匿名函数,如下所示:

 $("#cat_code").change(function() { your code } );

或者使用on函数,如果元素动态出现:

$(body).on( "change", "#cat_code", function() { your code } )

【讨论】:

  • @idlerbois 如果我使用了您的第一个建议,那么这条线怎么样? $.getJSON('autocomplete.php?selected='+val, { items: request.term }, response); ?这个 autocomplete.php?selected='+val,?
  • 你是问“在这种情况下如何获取val”? val你可以通过这个val = $(this).val()
  • $("#cat_code").change(function() { val = $(this).val(); $( "#items" ).autocomplete({ selectFirst: true, 来源:函数(请求,响应){ $.getJSON('autocomplete.php?selected='+val, { items: request.term }, response); } }); });像这样?
【解决方案2】:

function selCatCodeChange(selVal) {  
  GetChangedValue1(selVal);
  GetChangedValue2(selVal);
}
    
function GetChangedValue1(str) {
  if (str==""){
    document.getElementById("item_code").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest)   {
    // code for IE7+, Firefox, Chrome, Opera, Safari   
    xmlhttp=new XMLHttpRequest();  
  } else {
    // code for IE6, IE5   
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  } 
  xmlhttp.onreadystatechange=function(){   
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("item_code").value = xmlhttp.responseText;
    }   
  }
  xmlhttp.open("GET","getajax.php?q="+str,true);
  xmlhttp.send();
}
    
function GetChangedValue2 (val) {
  $( "#items" ).autocomplete({
    selectFirst: true,
    source: function(request, response) {
      $.getJSON('autocomplete.php?selected='+val, { items: request.term }, response);
    }
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="cat_code" id="cat_code" type="text" onchange="selCatCodeChange(this.value)">
</select>

AutoComplete 插件要么未正确构建,要么未将 Select 的值设置为响应 .autocomplete

【讨论】:

  • AutoComplete 插件要么未正确构建,要么未将 Select 的值设置为 .autocomplete 的响应
猜你喜欢
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多