今日帮同事看JQuery页面初始化的一个问题时,由于自己没怎么了解过JQuery,所以遇到了一点小麻烦,实现的效果就是初始化页面时,默认选中页面里某表格数据集的某行数据,这种问题,在Java\Delphi等语言里实现起来蛮容易,心想,JQuery里应该也还是容易的,这种小玩意儿不可能没提供吧~查了下API,嗯,的确对于JQ还是小菜一碟的,使用如下代码即可:

 



$( 
   " 
   #JQGrid 
   " 
   ).setSelection(Rowid,  
   true 
   );



 

目前整个页面的构建都基于自写的JS文件去构建的,所以把上面这代码加在了理所当然初始化的地方,结果刷新没效,后来挪步到好多地方,还是没效果,this is why?

首先肯定的是HTML的JS文件的导入先后顺序是没错的,HTML按从上到下加载JS的原则,肯定先导入JQuery核心JS文件,然后最后附加自写的JS文件;

浏览了一遍.html文件,基本没错,那么问题还是出自于自写的JS上

 

由于JS异步调用了一Java后台编写的获取数据的方法,此时基本大概猜到了,应该是这异步加载顺序搞得鬼

接着加alert一步步跟踪,果然发现,当程序加载执行js时,当调用了一个function的异步方法之后,如你直接拿来用或者哪怕放在JS文件的最后,那也是无用的,因为异步调用还没返回数据,JS已经执行完了或者直接抛某个异步function里的某个值undefined,这就是代码没生效的最终原因;

 

其实这种问题,就如同Delphi、C#等高级语言里不能跨线程调用有异曲同工之妙

 

所以解决思路就是:

将代码放置在异步调用的function里,当调用完之后,无论页面其它是否执行初始化完毕,反正另一线程都会继续调用这个function,问题解决!