Проблема в получении правильного результата для поля выбора - PullRequest
0 голосов
/ 13 июля 2011

Я использую Jquery как:

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

function test () - это некоторая функция javascript, моя проблема в том, что когда страница загружает вызовы функций по параметру «price». Теперь, когда я выбираю какой-либо элемент из поля выбора, вызывается test test () с использованием параметра sort (проверки по окну предупреждения) , но я не получаю правильный результат. Я имею в виду, когда я выбираю опцию в окне выбора, чем мой результат test (), как и в случае с «ценой», я полагаю, что это может быть проблемой из-за $(document).ready(function(){, Jquery. Функция test () создает HTML-код на основе параметра и отображает его на веб-странице. Подскажите пожалуйста, в чем может быть решение

EDIT:

Функциональный тест ():

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 голосов
/ 13 июля 2011

Код JQuery, который вы опубликовали, работает нормально.Демонстрация: http://jsfiddle.net/DtnUr/

Нам нужны дополнительные сведения, чтобы выяснить проблему, например ваш HTML-код и функции JS.

0 голосов
/ 13 июля 2011

Ваш вопрос не совсем понятен, но ваш код предупреждения срабатывает только тогда, когда документ готов - он не находится внутри функции события "change".

Попробуйте использовать следующее, чтобы увидеть, какое значение используетсявозвращается при изменении поля выбора:

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

При изменении поля выбора вы должны получить предупреждение с выбранным значением, которое поможет вам понять, почему функция test() не работаеткак вы ожидаете.

Если вы измените свой вопрос, включив в него HTML-код поля выбора и саму функцию test(), я исправлю свой ответ, чтобы помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...