2008-12-15 37 views
0

我是jQuery.just的新手,學習並使用它3周直到現在。 我已經寫了一個類來組織東西。 我給我的方法調用了2個以上的事件,但是在我觸發第二個事件期間該事件不起作用。 選擇器沒有問題。 我認爲我班有些東西缺失。我不知道。 請幫忙! 這裏的片段:Jquery:我的班級在第二次電話中不起作用

$("#btnPersonalNext, #btnDocListBack, #pDocList").livequery('click',function() 
{ 
    var docListContent = 'loadDocumentList.php'; 
    $("#contentpaper").addContent(
    { 
    _tag:'div', 
    _id: 'contentDocList', 
    _class: 'content', 
    _content: docListContent, 
    _heading: 'Document List' 
    }); 
    //store personal info in session: 
}); 

addContent()是函數。 當我點擊#btnPersonalNext,這工作,但#btnDocListBack,沒有更多。

這是我的班級(jquery.content.js)。它所做的是將HTML加載到特定的_tag中,並將其加載到特定的_id中。

(function($) 
{ 
    $.fn.addContent = function(options) 
    { 
    var defaults = { 
     _tag: 'div', 
     _id: '', 
     _class: '', 
     _content: '', 
     _heading: '', 
     _clearExisting:'yes', 
     _insertAfterID:'', 
     _deleteBeforeInsert:'no' 
    }; 
    var options = $.extend(defaults, options); 

    return this.each(function() 
    { 
     obj = $(this); 
     if(options._clearExisting=='yes'){ 
     obj.empty(); 
     } 
     if(options._deleteBeforeInsert =='yes'){ 
     $('#'+options._id).remove(); 
     } 

     var innerHtml = '<' + options._tag + ' id="' + options._id + '" class="' + options._class + '">'; 
     if(options._heading!=''){ 
     innerHtml += '<h2>' + options._heading + '</h2>'; 
     } 

     if(/^[A-Za-z0-9]+\.php(\??([A-Za-z0-9]+=[A-Za-z0-9]+)(&[A-Za-z0-9]+=[A-Za-z0-9]+)*)?$/.test(options._content)) 
     {//if .php 
     $.get(options._content,function(data) 
     { 
      //handle response from server here. 
      innerHtml += data; 
      innerHtml +='</' + options._tag + '>'; 
      if(options._insertAfterID !=''){ 
      $('#'+options._insertAfterID).after(innerHtml); 
      } 
      else{ 
      obj.html(innerHtml); 
      } 
     }); 
     } // PHP rule 
     else 
     {// .html 
     innerHtml += options._content; 
     innerHtml +='</' + options._tag + '>'; 
     if(options._insertAfterID !=''){ 
      $('#'+options._insertAfterID).after(innerHtml); 
     } 
     else{ 
      obj.html(innerHtml); 
     } 
     } // HTML rule 
    }); // End of Returned Function 
    };// End of addContent definition 
})(jQuery); 

希望的答案,太感謝你了!

這裏是我的DOM結構:

 
<!-- JS --> 
<script type="text/javascript" src="jquery_plugins/jquery-1.2.6.js" ></script> 
<script type="text/javascript" src="jquery_plugins/jquery.livequery.js" ></script> 
<script type='text/javascript' src='jquery_plugins/jquery.simplemodal.js'></script> 
<script type="text/javascript" src="jquery_plugins/jquery.session.js"></script> 
<!--<script type="text/javascript" src="jquery_plugins/jquery-plugin-wrapinner.js"></script>--> 
<script type="text/javascript" src="jquery_plugins/jquery.content.js"></script> 
<script type="text/javascript" src="jquery_plugins/osra_main.js"></script> 
</head> 

<body> 
<div id="wrapper"> 
    <div id="header"> 
     <div id="headercontent">Please Enable JavaScript to Continue</div> 
    </div> 
    <div id="main"> 
     <div id="sidebarpaper" class="left"> 
      <!-- sidebar contents (class="sidebar")--> 
     </div> 
     <div id="contentpaper" class="right"> 
      <!-- main contents (class="content")--> 
     </div> 
     <div id="modals" class="clear"> 
      <!--modal pop-up window --> 
     </div> 
    </div> 
    <div id="footer"><p></p></div> 
</div> 
</body> 
</html> 

我動態加載內容的div id爲#contentpaper。 我不知道如何重新綁定,其他的,使用的liveQuery插件,有了這個用法: $("#btnID").livequery('click',function(){});

-bgreen1989

+0

我看不到你正在談論的按鈕在哪裏定義? btnDocListBack btnPersonalNext等? – krosenvold 2008-12-15 10:34:41

回答

2

我在給它一個快速查找和代碼大小有點難以診斷,所以我有點想要讓自己和其他人更容易理解。

我認爲是問題的一部分,BADTHING(TM)是通過將字符串粘在一起來生成html的。這可能會破壞DOM事件綁定,並呈現非常糟糕的代碼。

另外,看到你依賴於實時查詢,「粘合在一起的字符串」方法可能不會觸發生成實時查詢技巧(不確定)所需的dom事件,並且您可能會發現使用DOM方法生成DOM元素應該可以解決這個問題

(function($){ 
    $.fn.addContent = function(options) 
    { 
    var defaults = { 
     _tag: 'div', 
     _id: '', 
     _class: '', 
     _content: '', 
     _heading: '', 
     _clearExisting:'yes', 
     _insertAfterID:'', 
     _deleteBeforeInsert:'no' 
    }; 
    var options = $.extend(defaults, options); 
    var phpregex = /^[A-Za-z0-9]+\.php(\??([A-Za-z0-9]+=[A-Za-z0-9]+)(&[A-Za-z0-9]+=[A-Za-z0-9]+)*)?$/; 

    var x_generateElement = function() 
    { 
     var container = document.createElement(options._tag); 
     $(container).attr("id", options._id); 
     $(container).addClass(options._class); 
     if(options._heading!=''){ 
     var header = document.createElement("h2"); 
     $(header).text(options._heading); 
     $(container).append(header); 
     } 
     return container; 
    }; 

    var x_preClear = function(obj) 
    { 
     if(options._clearExisting=='yes'){ 
     obj.empty(); 
     } 
     if(options._deleteBeforeInsert =='yes'){ 
     $('#'+options._id).remove(); 
     } 
     return obj 
    }; 

    var x_addElement = function(e , obj) 
    {  
     if(options._insertAfterID !=''){ 
      $('#'+options._insertAfterID).after(e); 
     } 
     else{ 
     obj.html(e); 
     } 
     return obj; 
    }; 

    return this.each(function() 
    { 
     var obj = x_preClear($(this)); 
     var container = x_generateElement(); 

     if(phpregex.test(options._content)){ 
     $.get(options._content,function(data){ 
      //handle response from server here. 
      $(container).append(data); 
      obj = x_addElement(container, obj); 
     }); 
     } else { 
     $(container).append(options._content); 
     obj = x_addElement(container, obj); 
     } 
    }); 
    }; 
})(jQuery); 
相關問題