2013-09-10 5 views
0

Динамическая сгенерированная кнопка ввода иногда вызывает функцию (функция представлена ​​на той же странице, вне $(document).ready()), но иногда давая Typeerror, что функции нет.
В shiftRight(), я создаю кнопку shiftLeftButton и нажимаю, я вызываю функцию shiftLeft() с аргументом. shiftLeftButtons более чем один. Иногда shiftLeftButton вызывает функцию с некоторыми аргументами, но иногда нет.Динамическая сгенерированная кнопка ввода не вызывающая функция каждый раз

Я попытался отладить это и искал эту проблему, но не получал решения.

function shiftRight(leftButtonNo) { 
    //Creating a hidden field in the form 
    if(!$("#innerQuestionListDiv"+leftButtonNo).doesExist()){ 
     if(!$("#clonedDiv"+leftButtonNo).doesExist()){ 
      $('#TestSetFormId').append('<input type="hidden" name="questionIdsForTestSet" value="'+ leftButtonNo+'" id="questionIdForTestSet'+ leftButtonNo+'" />'); 



        ***//Creating shift left button 
      var $shiftLeftButton= $('<input/>').attr({ 
       type: 'button', name:'shiftLeft', 
       id:'shiftLeftId'+leftButtonNo , 
       value:'<--'+leftButtonNo+'', 
       onclick:'shiftLeft('+leftButtonNo+')' 
       });*** 

        //Getting clone of the div 
      $cloneQuestionDiv=$("#div"+leftButtonNo).clone(); 

        ***//Appending it to a cloned div 
      $cloneQuestionDiv.append($shiftLeftButton);*** 

      $cloneQuestionDiv.attr('id', 'clonedDiv'+leftButtonNo); 
      $cloneQuestionDiv.prependTo('#existingQuestionDiv'); 
      $("#list"+leftButtonNo).hide(); 
     }else{ 
      alert("You already added this question"); 
      $("#list"+leftButtonNo).hide(); 
     } 
    }else{ 
     alert("Question already exist into the Test Set"); 
     $("#list"+leftButtonNo).hide(); 
     return; 
    } 
} 

*function shiftLeft(rightButtonNo){ 
    //Removing hidden field in the form 
    $("#questionIdForTestSet"+rightButtonNo).remove(); 

    $("#clonedDiv"+rightButtonNo).remove(); 

    if($("#list"+rightButtonNo).doesExist()){ 
     $("#list"+rightButtonNo).show();  
    } 
    $(this).hide(); 
}* 
+1

Вы пытались добавить обработчик с помощью JQuery '.На)' функцию (а не пытаться установить onclick' атрибут '? Я предполагаю, что браузер устанавливает атрибут, но не «компилирует» его. – CodingGorilla

+0

.on() работает в document.ready(), я пытался, но контент поступает из вызова ajax. Я изменил свою логику. Вместо того, чтобы делать это на стороне клиента, я делаю это со стороны сервера. Он работает нормально. Спасибо за ваш комментарий. –

ответ

0

попробовать это:

function shiftRight(leftButtonNo) { 

    //Creating a hidden field in the form 
    if(!$("#innerQuestionListDiv" + leftButtonNo).doesExist()) { 

     if(!$("#clonedDiv"+leftButtonNo).doesExist()) { 

      var button = $('<input type="hidden" name="questionIdsForTestSet" value="'+ leftButtonNo+'" id="questionIdForTestSet'+ leftButtonNo+'" />'); 
      $('#TestSetFormId').append(button); 


      var 
       $cloneQuestionDiv = $("#div"+leftButtonNo).clone(), 
       $list = $("#list"+leftButtonNo); 

      var $shiftLeftButton = (function(leftButtonNo, button, $cloneQuestionDiv, $list) { 

       var newButton = $('<input/>').attr({ 
        type: 'button', 
        name:'shiftLeft', 
        id:'shiftLeftId'+leftButtonNo , 
        value:'<--' + leftButtonNo 
       }); 

       newButton.bind('click', function(event) { 
        shiftLeft(leftButtonNo, button, $cloneQuestionDiv, $list, event); 
       }); 

       return newButton; 

      }(leftButtonNo, button, $cloneQuestionDiv, $list)); 


      $cloneQuestionDiv.append($shiftLeftButton); 

      $cloneQuestionDiv.attr('id', 'clonedDiv'+leftButtonNo); 
      $cloneQuestionDiv.prependTo('#existingQuestionDiv'); 

      $list.hide(); 

     }else{ 
      alert("You already added this question"); 
      $("#list"+leftButtonNo).hide(); 
     } 
    }else{ 
     alert("Question already exist into the Test Set"); 
     $("#list"+leftButtonNo).hide(); 
     return; 
    } 
} 

function shiftLeft(rightButtonNo, questionIdForTestSet, cloneQuestionDiv, list, event){ 

    //Removing hidden field in the form 
    $(questionIdForTestSet).remove(); 

    $(cloneQuestionDiv).remove(); 

    if($(list).doesExist()) { 
     $(list).show();  
    } 

    $(this).hide(); 
} 
+0

Я изменил свою логику. Вместо того, чтобы делать это на стороне клиента, я делаю это со стороны сервера. Он работает нормально. Спасибо за Ваш ответ. –

Смежные вопросы