2017-01-12 1 views
3

웹 사이트 (Python + Flask)에서 관리자 패널을 개발 중이며 모두 선택 토글을 구현하는 동안 문제가 발생했습니다.선택한 항목을 토글 할 때 동작을 활성화하는 방법

표는 다음과 같습니다 :

enter image description here

자체가 구현 된 토글하지만 지금은 유용 만들고 싶어.

'SELECTED'버튼을 클릭하면 선택한 모든 항목 (깃발)을 삭제할 수 있기를 원하지만 나는 그걸 어떻게 풀 수 있는지 확실하지 않습니다.

각각의 플래그가 개별적으로 glyphicon - 쓰레기 다음 파이썬/HTML에 따라 클릭하여 삭제할 수 있습니다 :

<button onclick="deleteSelected('politician')">SELECTED</button> 
{% for flag in flags %} 
    <tr> 
    <!-- Check box --> 
    <td style="width: 60px;"><input type="checkbox" name="politician" value="bar1"></td> 
    <!-- First Name --> 
    <td class="col-title">{{flag.flagtitle}}</td> 
    <!-- Last Name --> 
    <td class="col-description">{{flag.flagreason}}</td> 
    <!-- Details --> 
    <td> 
     <a href="/flag/{{ flag.idflag }}"> 
     <span class="glyphicon glyphicon-info-sign"></span> 
     </a> 
    </td> 
    <!-- Edit icon --> 
    <td class="list-buttons-column"> 
     <a href="/politician/{{ flag.politician }}"> 
     <span class="glyphicon glyphicon-pencil"></span> 
     </a> 
    </td> 

    <!-- DELETE ITEM/FLAG --> 
    <td class="col-delete"> 
     <form action ="/delete_flag/{{ flag.idflag }}" method="POST"> 
     <button onclick="return confirm('Are you sure you want to delete this flag?');"> 
      <span class="fa fa-trash glyphicon glyphicon-trash"></span> 
     </button> 
     </form> 
    </td> 

    </tr> 
{% endfor %} 

내 생각은 선택한 내용을 삭제하려면 자바 스크립트 기능을 개발했지만, 난 ' 확실하지 않아요. 어떻게하면 flag.idFlag을 얻을 수 있는데, 이는 플래그의 ID와 관련이 있습니다. 그것은 당신에게 내가 무엇을 찾고 아이디어를 제공하는 것을 의미하고,

function deleteSelected(elem) { 
    checkboxes = document.getElementsByName(elem); 
    for(var i=0, n=checkboxes.length;i<n;i++) { 
     if (checkboxes[i].checked) { 
      delete((checkboxes[i].getSelectedFlag).idFlag) 
     } 
    } 
} 

은 물론 위의 코드가 작동하지 않습니다

는 나는 다음과 같이 보일 거라 생각 했어요.

내가 할 수있는 방법이 있습니까? 미리 감사드립니다.

편집 : 나는 그것을 알아 냈다 있도록

좋아. action="/delete_flag/flag.idFlag" 인 여러 양식을 제출해야한다는 것을 고려하여 플래그의 ID를 볼 수있는 테이블에 열을 추가했습니다. 다음과 같은 그 문제

enter image description here

, I는 I 만들고 폼을 송신 할 수 있도록, 각 행 (ID)의 제 1 값을 검색하고 ID 배열에 저장하는 JS 함수를 만들어 그들 각각을 위해.

배열의 각 ID에 대해 form.action = "/delete_flag/" + retrievedID 양식을 만듭니다. 아래 코드를 참조하십시오.

function deleteRecords() { 
    var arrayOfIDs; 
    arrayOfIDs = $('#table-style').find('[type="checkbox"]:checked').map(function(){ 
      return $(this).closest('tr').find('td:nth-child(2)').text(); 
     }).get(); 

     var delFlagForm = document.createElement("form"); 
     var action; 
     var formID; 
     var submitFormStr; 

     for (var i = 0; i < arr.length; i++) { 
      action = "/delete_flag/" + arr[i]; 
      formID = 'form' + i; 
      delFlagForm.setAttribute("id", formID); 
      delFlagForm.setAttribute("method", "post"); 
      delFlagForm.setAttribute("action", action); 

      delFlagForm.submit(); 
     } 
} 

여러 양식 제출이 비동기식으로 만 작동한다는 것을 알기 전까지 내 머리 속에서 좋은 소리가 들렸습니다. 그래서 다음과 같이 변경했습니다. 여기가 바로 붙어 있습니다.. 간단하게 제출되지 않습니다 형태 아무 일도 발생하지 않습니다 :

function deleteRecords() { 
    var arraryOfIDs; 
    arraryOfIDs = $('#table-style').find('[type="checkbox"]:checked').map(function(){ 
      return $(this).closest('tr').find('td:nth-child(2)').text(); 
     }).get(); 

     var delFlagForm = document.createElement("form"); 
     var action; 
     var formID; 
     var submitFormStr; 

     for (var i = 0; i < arr.length; i++) { 
      action = "/delete_flag/" + arr[i]; 
      formID = 'form' + i; 
      delFlagForm.setAttribute("id", formID); 
      delFlagForm.setAttribute("method", "post"); 
      delFlagForm.setAttribute("action", action); 

      if (i != 0) submitFormStr += ' #' + formID; 
      else submitFormStr = '#' + formID; 
     } 
     $('submitFormStr').submit(); 
     return false; 
} 

루프 매장 내에 업데이트 변수 submitFormStr 같이 만든 각 양식에 대한 ID가 다음 #form0 #form1 것은 그래서 이런 이유로 내가 왜 조각을 이해하지 못하는 $('#form0 #form1').submit();에 해당하는 코드 $('submitFormStr').submit();이 작동하지 않습니다.

내가 잘못하고있는 것이 있습니까?

답변

0

좋아, 그래서 알아 냈어.action="/delete_flag/flag.idFlag" 인 여러 양식을 제출해야한다는 것을 고려하여 플래그의 ID를 볼 수있는 테이블에 열을 추가했습니다. 다음과 같은 그 문제

enter image description here

, I는 I 만들고 폼을 송신 할 수 있도록, 각 행 (ID)의 제 1 값을 검색하고 ID 배열에 저장하는 JS 함수를 만들어 그들 각각을 위해.

배열의 각 ID에 대해 form.action = "/delete_flag/" + retrievedID 양식을 만듭니다. 아래 코드를 참조하십시오.

function deleteRecords() { 
    var arrayOfIDs; 
    arrayOfIDs = $('#table-style').find('[type="checkbox"]:checked').map(function(){ 
      return $(this).closest('tr').find('td:nth-child(2)').text(); 
     }).get(); 

     var delFlagForm = document.createElement("form"); 
     var action; 
     var formID; 
     var submitFormStr; 

     for (var i = 0; i < arr.length; i++) { 
      action = "/delete_flag/" + arr[i]; 
      formID = 'form' + i; 
      delFlagForm.setAttribute("id", formID); 
      delFlagForm.setAttribute("method", "post"); 
      delFlagForm.setAttribute("action", action); 

      delFlagForm.submit(); 
     } 
} 

여러 양식 제출이 비동기식으로 만 작동한다는 것을 알기 전까지 내 머리 속에서 좋은 소리가 들렸습니다. 그래서 다음과 같이 변경했습니다. 여기가 바로 붙어 있습니다.. 간단하게 제출되지 않습니다 형태 아무 일도 발생하지 않습니다 :

function deleteRecords() { 
    var arraryOfIDs; 
    arraryOfIDs = $('#table-style').find('[type="checkbox"]:checked').map(function(){ 
      return $(this).closest('tr').find('td:nth-child(2)').text(); 
     }).get(); 

     var delFlagForm = document.createElement("form"); 
     var action; 
     var formID; 
     var submitFormStr; 

     for (var i = 0; i < arr.length; i++) { 
      action = "/delete_flag/" + arr[i]; 
      formID = 'form' + i; 
      delFlagForm.setAttribute("id", formID); 
      delFlagForm.setAttribute("method", "post"); 
      delFlagForm.setAttribute("action", action); 

      if (i != 0) submitFormStr += ' #' + formID; 
      else submitFormStr = '#' + formID; 
     } 
     $('submitFormStr').submit(); 
     return false; 
} 

루프 매장 내에 업데이트 변수 submitFormStr 같이 만든 각 양식에 대한 ID가 다음 #form0 #form1 것은 그래서 이런 이유로 내가 왜 조각을 이해하지 못하는 $('#form0 #form1').submit();에 해당하는 코드 $('submitFormStr').submit();이 작동하지 않습니다.

내가 잘못하고있는 것이 있습니까?

관련 문제