Jquery: мой класс не работает во время второго вызова

Я новичок в jQuery.Просто учиться и использовать его в течение 3 недель до сих пор. Я написал класс для организации вещей. Я вызываю свой метод с более чем 2 событиями, но событие не работает во время моего запуска второго события. нет ничего плохого в селекторе. Я думаю, что-то не хватает в моем классе. Я не знаю. пожалуйста помоги! вот фрагмент:

$("#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>

<Тело>
<div id = "обертка">   
    <div id = "header">
        <div id = "headercontent"> Пожалуйста, включите JavaScript для продолжения </ div>
    </ DIV>
    <div id = "main">
        <div id = "sidebarpaper" class = "left">
            <! - содержимое боковой панели (class = "sidebar") ->
        </ DIV>
        <div id = "contentpaper" class = "right">
            <! - основное содержание (class = "content") ->
        </ DIV>
        <div id = "modals" class = "clear">
            <! - модальное всплывающее окно ->
        </ DIV>
    </ DIV>
    <div id = "footer"> <p> </ p> </ div>
</ DIV>
</ Body>
</ Html>

Я загружаю содержимое динамически в div с идентификатором #contentpaper. Я не знаю, как перепривязать, кроме использования плагина livequery, с этим использованием: $("#btnID").livequery('click',function(){});

-bgreen1989

15.12.2008 06:23:06
Я не вижу, где определены кнопки, о которых вы говорите? btnDocListBack btnPersonalNext и т. д.?
krosenvold 15.12.2008 10:34:41
1 ОТВЕТ
РЕШЕНИЕ

Я быстро осмотрел его, и размер кода было немного сложно диагностировать, поэтому я немного пересмотрел его, надеясь сделать его более понятным для себя и других.

Я думаю, что это ЧАСТЬ проблемы, а 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);
2
15.12.2008 08:35:29