获取选择框的正确结果时出现问题

时间:2011-07-13 09:50:00

标签: jquery html javascript-events

我正在使用Jquery:

$(document).ready(function(){
 test("price");
 alert("hi");
 $("#item2").change(function() 
    { 
        sort= $("#item2").val(); 
        test(sort);
    }); 
 });

函数test()是一些javascript函数,我的问题是当页面通过“price”参数加载函数调用时。当我从select box函数中选择一些项时,使用sort参数调用test()(通过alert box验证) 。但我没有得到正确的结果。我的意思是当我从选择框中选择选项时,我的test()结果与“price”一样,我认为这可能是问题,因为Jquery的$(document).ready(function(){。 test()函数根据参数制作一些html代码并在网页上显示 请建议我可以解决的问题

修改

function test()是:

function test(sort)
{
        <%
         Ampliflex ms = Ampliflex.getInstance();
         String solrIP = ms.getSolrIP();
         String solrPort = ms.getSolrPort();
         String rows = ms.getSearchResultCount();
        %>
        solrIP='<%= solrIP %>';     // get Solr IP address
        solrPort='<%= solrPort %>'; // get Solr Port number
        rows='<%= rows %>';         // get number of results to return
        solrURL="http://"+solrIP+":"+solrPort;
        var query="${searchStr}";   // get the query string entered by ECommerce user
        query=query.replace(/[^a-zA-Z 0-9*?:.+-^""_]+/g,''); // Remove special characters 
        query=query.replace(/\*+/g,'*'); // Replace multiple occurrence of "*" with single "*"
        var newquery=query;
        if(parseInt(query)==NaN)
        {
            var lowerCaseQuery=query.toLowerCase();
            newquery=lowerCaseQuery;
        }
        else{
        var lowerCaseQuery=query;
        }

        // sort= document.getElementById("item2").value;

        $.getJSON(solrURL+"/solr/db/select/?qt=dismax&wt=json&&start=0&rows="+rows+"&q="+lowerCaseQuery+"&hl=true&hl.fl=text&hl.usePhraseHighlighter=true&sort="+sort+" desc&json.wrf=?", function(result){
            var highlight = new Array(result.response.numFound);
            $.each(result.highlighting, function(i, hitem){
                        var rg = /<em>(.*?)<\/em>/g;
                        var res = new Array();
                        var match = rg.exec(hitem.text[0]);
                        while(match != null){
                                res.push(match[1])
                                match = rg.exec(hitem.text[0]);
                                }
                                highlight[i]=res[0]
                        for (j=1 ;j<res.length;j++)
                        {
                        highlight[i]= highlight[i]+","+res[j];
                        }
                    });

                    var html="<table><tr>"
                    var count=0;
                    var alt="NoImage";
                    var size="3pt";
                    var id;
                    var flag=1; // Flag for error messages 
                    border="1";
                    // If no search results
                    if(result.response.numFound==0)
                    {
                     var msg= "<hr /><font size="+size+" >We're sorry, we found no results for <b>"+document.getElementById("queryString").value+"</font><hr />";

                    }
                    else
                    {
                /*  var msg= "<hr /><font size="+size+" >Total Results Found <b>  "+ result.response.numFound+"</b> for "+"<b>"+document.getElementById("queryString").value+"</b> keyword</font><hr /> ";*/

                    if (newquery==lowerCaseQuery)
                    { 
                    var msg= "<hr /><font size="+size+" >Total Results Found <b>  "+ result.response.numFound+"</b> for "+"<b>"+query+"</b> </font><hr /> ";
                    }
                    else
                    {
                    var msg= "<hr /><font size="+size+" >There were no exact matches for <b>  "+ query+"</b> , so we searched automatically for  "+"<b>"+query+"</b> and yielded "+result.response.numFound+" result(s)</font><hr /> ";
                    }
                    // Parse solr response and display it on web page
                        $.each(result.response.docs, function(i,item){
                            var word = new Array();
                            word=highlight[item["UID_PK"]].split(",");
                            var result="";
                            var j=0;
                            for (j=0 ;j<=item.text.length;j++)
                            {
                                result = result+item.text[j]+"<br>";
                            }
                            for (j=0 ;j<word.length;j++)
                            {      
                                result=result.replace(word[j],'<em>' + word[j] + '</em>');
                            }
                            html+="<td><table>";
                            var src=item.image;
                            id="id";
                            if(src!= null && src!= ""){
                                    html+="<p><tr><td><br>"+"<img id= "+id+ " src="+src+ " border="+border+ "   /></td></tr>";
                                    count=count+1;

                                    html += "<tr><td><b>ImagePath</b>  "+ item.image+"</td></tr>";
                            }
                            // If not insert a default image  
                                  else
                                  {

                                      src="images/products/default.jpg";
                                      html+="<tr><td><br><p>"+"<img id= "+id+ " src="+src+ " border="+border+" /></td></tr>";
                                      count=count+1;
                                      html += "<tr><td><b>ImagePath</b>  "+"No image path found" +"</td></tr>";
                                  }
                                 html += "<tr><td>UID_PK: "+ item.UID_PK+"</td></tr>";
                                 html += "<tr><td>Name: "+ item.name+"</td></tr>";
                                 html+="<tr><td><b>Price: $"+item.price+"</td></tr>";
                                 html+="<tr><td> "+result+"<br></td></tr>";
                                 html+="</p></table></td>"
                            if(count%3==0)
                            {
                                html+="</tr>"
                                html+="<tr>"
                            }

                    });
                    html+="</table>"
                }
                $("#text_container").html(msg);
                $("#result").append(html);


            }

    });

});
}

2 个答案:

答案 0 :(得分:0)

您的问题不是特别清楚,但您的警报代码仅在文档准备就绪时触发 - 它不在“更改”事件函数内。

尝试使用以下内容查看更改选择框时返回的值:

$(document).ready(function(){
 test("price");
 $("#item2").change(function() 
    { 
        sort= $("#item2").val(); 
        alert(sort);
        test(sort);
    }); 
 });

更改选择框时,您应该收到包含所选值的警报,这有助于您了解test()功能无法正常运行的原因。

如果您修改问题以包含选择框的HTML和test()函数本身,我会修改我的答案以提供帮助。

答案 1 :(得分:0)

您发布的JQuery代码工作正常。演示:http://jsfiddle.net/DtnUr/

我们需要更多细节来解决问题,例如您的HTML代码和JS函数。