2015-04-21 3 views
2

Я создаю таблицу динамически во время выполнения на основе какого-либо действия в пользовательском интерфейсе следующимCheckbox функция обратного вызова не вызывался из второго OnChange

 $(figure.children.data).each(function (i, Column) { 
      if (i != 0) { 
       var callBack = function() { 
        RemoveColumn(figure, Column.figure.id); 
       } 

       var input = $("<input>") 
          .attr("type", "checkbox") 
          .attr("checked", "checked") 
          .on("change", callBack); 

       var tr = $('#tblEntity').append('<tr>'); 

       $("<td>").appendTo(tr).append(input); 

       $("<td>").appendTo(tr).append(Column.figure.text); 
      } 
}); 

и функция RemoveColumn выглядит следующим образом.

function RemoveColumn(figureToBeModified,columnID) {  
    $(figureToBeModified.children.data).each(function (i, column) { 
     if (column.figure.id == columnID) { 
      figureToBeModified.hide(column.figure); 

      figureToBeModified.remove(column.figure); 
     } 
    }); 
} 

Проблема: Когда я снимите флажок в первый раз она работает нормально (значит RemoveColumn функция вызывался), но послесловие, если я проверить или снимите установите флажок RemoveColumn не вызывался ,

+0

вы можете предоставить скрипку? – nirmal

+0

Согласен. Я не вижу ничего неправильного в вашем javascript события изменения, но не зная больше о том, что за фигура, трудно сказать, что не так. С помощью [очень упрощенного подхода] (http://jsfiddle.net/6q9vxapj/) он работает, когда он снова вызван. – drs9222

ответ

0

Строка var tr = $('#tblEntity').append('<tr>'); добавит tr к таблице, но не назначит ее tr.

Я думаю, что вы имели в виду что-то вроде этого:

var tr = $("<tr>"); 
    $('#tblEntity').append(tr);  
    $("<td>").appendTo(tr).append(input); 
    $("<td>").appendTo(tr).append(Column.figure.text); 

Кроме того, не было бы проще, если бы RemoveColumn была определена следующим образом:

function RemoveColumn(figureToBeModified, column) { 
    figureToBeModified.hide(column.figure);  
    figureToBeModified.remove(column.figure); 
} 

и называется так:

var callBack = function() { 
    RemoveColumn(figure, Column); 
} 

Если вы удалите и спрячьте что-нибудь вроде jQuery, удалите и спрячьте, то зачем скрыть его, просто чтобы удалить все тог эфир на следующей строке?

Ни один из них напрямую не касается вашего вопроса, и мне нужно больше информации о ваших данных о фигуре, чтобы понять это, но, возможно, это поможет вам приблизиться к тому месту, где вы хотите быть.

0

Это похоже на проблему с объемом.

Переменная callback - это функция, которая получает параметры. Тем не менее, так оно и есть сейчас, только принимает последние значения, переданные ему.

Советую изменить его к этому:

var callback = function(fig, figId) { 
    return function() { 
     RemoveColumn(fig, figId); 
    } 
} 

Затем создайте флажок, как это:

var input = $("<input>") 
      .attr("type", "checkbox") 
      .attr("checked", "checked") 
      .on("change", callBack(figure, Column.figure.id)); 

Таким образом, функция RemoveColumn() всегда будет иметь правильные значения для использования.

0

Когда я снимите флажок в первый раз она работает штраф (значит функция RemoveColumn становится называется), но послесловие, если я проверить или снимите флажок флажок RemoveColumn не вызывался

Постарайся комментируя эту строку:

if (column.figure.id == columnID) { 
    figureToBeModified.hide(column.figure); 
    //figureToBeModified.remove(column.figure);/* on first call it gets removed, so its not available for next time */ 
} 
Смежные вопросы