var varThisObjPosition=getPosition(varThisObj); //取得事件发生处控件坐标
with(varMenuObj){
style.top=varThisObjPosition.top+varThisObjPosition.height+"px";
style.left=varThisObjPosition.left+"px";
style.visibility="visible";
innerHTML="<div><h4>可输拼音/汉字/首字母</h4>"+(varHtmlStr==""?"<nobr>没有找到您查的城市‘"+varObjValue+"’。</nobr>":varHtmlStr+varNextPageStr)+"</div>"; //此句不理解,但个人猜是获得用户输入后,JS取值后给varHtmlStr,然后输出到页面上。不知道这样理解对吗?JS达人指点一下。

解决方案 »

  1.   

    从你这代码里也没法看出来varHtmlStr是啥东东。不好说反正就一个三元运算符
    var res=a?b:c;
    a条件成立,则返回b,否则返回c然后结合一下,你代码中这个varHtmlStr是什么。就可以知道是什么意思了
      

  2.   

    可以这么理解,varObjValue是用户输入的城市名,varHtmlStr是根据这个城市名取得的对城市的简介(可能是HTML形式的)。varNextPageStr是是否还有下一页的指示串(可能是HTML形式的)。当查到的varHtmlStr为空时,就提示用户所输入的varObjValue没被找到。如果不为空,就显示对应的简介。前面的
          style.top=varThisObjPosition.top+varThisObjPosition.height+"px";
            style.left=varThisObjPosition.left+"px";
            style.visibility="visible";
    则是打算在激发事件的控件旁边来显示上面所说的信息。
      

  3.   

    首先多谢theforever,
    在测试的时候在 城市输入框:输入<script>alert(1)</script>,就会直接弹出 1,这说明是没有找到城市名,就用innerHTML直接把上述JS语句输出到屏幕上,进行DOM 操作,这样理解对吧?
      

  4.   

    这就不对了。用户输入的城市名是varObjValue,从变量名称上,对比一下varHtmlStr,就知道这个名称不允许用HTML格式。所以用户输入的城市应该是受到过滤限制的,只允许输入“伊拉克”“利比亚”这样的地名或城市名。当没有找到地名对应的信息时,就返回:<nobr>没有找到您查的城市‘伊拉克’。</nobr>在找到对应的信息时,才把内容放在varHtmlStr里,显示出来。varHtmlStr才是HTML格式的,因为它作为城市的信息,可能包含图文内容,需要用HTML格式呈现。比如你要在那个内容里放置你这个alert也可以,具体内容应该是什么,要根据这个应用的作用和存储的内容来定。
      

  5.   


    用户输入的城市名,先赋给varObjValue———>如果有这个城市名———>然后把“此城市名”赋给(varHtmlStr)同时输出到页面上;所以说alert(1)最终赋给了(varHtmlStr),在屏幕上弹出框。
    是需要对(varHtmlStr)进行过滤的。这是我的理解!
      

  6.   

    我觉得应该是赋值给 varHtmlStr。