存档

文章标签 ‘问题之分析与解决’

jquery 如何监听div内容的变化

2012年7月10日 3 条评论

我们做电子商务,javascript框架采用的是jQuery,在开发过程中遇到了上面标题列出的问题:如何监听div内容的变化。

先给出最终代码(后续进行相关分析):

var title = $("b.facility");
var title = $('#title');//the element I want to monitor
title.bind('DOMNodeInserted', function(e) {
    alert('element now contains: ' + $(e.target).html());
});

解决问题的思路如下:

我们先回顾一下jQuery事件中的change()方法定义和用法:

当元素的值发生改变时,会发生 change 事件。

该事件仅适用于文本域(text field),以及 textarea 和 select 元素。

change() 函数触发 change 事件,或规定当发生 change 事件时运行的函数。

注释:当用于 select 元素时,change 事件会在选择某个选项时发生。当用于 text field 或 text area 时,该事件会在元素失去焦点时发生。

但是问题出现了关于div内容的改变change方法中只字不提,我们如何处理那?

后续百度关键词: jquery div 内容发生变化:无果;

继续,bing关键词:jquery how to listen div change 找到一篇相关文档http://stackoverflow.com/questions/2712124/jquery-listen-to-changes-within-a-div-and-act-accordingly
粗略的明白是采用自定义事件的方式去处理问题,采纳代码如下:

$('#laneconfigdisplay').bind('contentchanged', function() { 
  // do something after the div content has changed 
  alert('woo'); 
});
// 这样会调用上面的函数
$('#laneconfigdisplay').trigger('contentchanged'); 

但是contentchanged是什么内容没有说明,继续追溯
bing关键词:jquery how to listen div change 找到一篇相关文档
继续,bing关键词:jquery contentchanged 找到一篇相关文档http://stackoverflow.com/questions/1449666/create-a-jquery-special-event-for-content-changed
这篇文章详细说明了contentchanged内容定义,采纳代码如下:

jQuery.fn.watch = function( id, fn ) { 

    return this.each(function(){ 

        var self = this; 

        var oldVal = self[id]; 
        $(self).data( 
            'watch_timer', 
            setInterval(function(){ 
                if (self[id] !== oldVal) { 
                    fn.call(self, id, oldVal, self[id]); 
                    oldVal = self[id]; 
                } 
            }, 100) 
        ); 

    }); 

    return self; 
}; 
jQuery.fn.unwatch = function( id ) { 

    return this.each(function(){ 
        clearInterval( $(this).data('watch_timer') ); 
    }); 

};

创建自定义事件

jQuery.fn.valuechange = function(fn) {     
    return this.bind('valuechange', fn);  
};
jQuery.event.special.valuechange = {        
    setup: function() {         
       jQuery(this).watch('value', function(){  
            jQuery.event.handle.call(this, {type:'valuechange'});  
        });        
     },
     teardown: function() {   
       jQuery(this).unwatch('value'); 
     } 
}; 

貌似这样的解决是完美的但是后续再继续查看到时候,发现有更简洁的方式,代码如下:

var title = $("b.facility");
var title = $('#title');//the element I want to monitor
title.bind('DOMNodeInserted', function(e) {
    alert('element now contains: ' + $(e.target).html());
});

感觉这应该是我需要代码,do it !fine

hibernate连接oracle集群问题之分析与解决

2012年7月5日 没有评论

最近公司做了一个基于三个框架struts,hibernate,spring 的项目,在连接oracle数据库集群时出现了问题,由于客户那边的保密要求,异常信息没有拷出来。当时的连接地址是从客户别的系统考出来的,别的系统就没有问题,就我们的系统连接不上,客户那边不能上面,没法查资料,当时郁闷死了,找了半天也没有找出来问题所在,不过最后还是解决了,在这里和大家分享一下。连接字符串如下所示:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST=(LOAD_BALANCE = ON)(FAILOVER = ON)(ADDRESS = (PROTOCOL = TCP)(HOST = ServerA)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = ServerB)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = DBServer)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 30)(DELAY = 5))))

其中连接不成功原因之分析:

  1. 检查连接字符串是否正确,如括号是否碰对。
  2. 检查连接地址是否正确,如在别的系统上是否能够连接成功。
  3. 检查本系统连接的驱动是否正确,最好用服务器oracle中的驱动

当时这些都检查了,都没有问题。但是还不行。最后才知道是因为加了此属*(SERVER = DEDICATED)数据库连接服务为专有,去掉就好使了。在本系统用了三个框架,也许是hibernate和spring对其数据库连接有单独的处理方式吧,当时也没弄怎么明白,总之把问题给解决了