2016-05-10 2 views
0

Dans mon application Rails, je veux permettre aux gens de supprimer des projets qu'une fois qu'elles sont entrées dans le titre du projet:désactiver une condition link_to

enter image description here

Mon actuel lien « Supprimer Bouton » est défini comme suit:

<%= link_to "Delete Project", @project, :method=> :delete, :class=>"btn btn-danger disabled delete_project_btn"%> 

Pourquoi le style fonctionne correctement, l'utilisateur peut toujours cliquer sur le lien, même lorsque le bouton a la classe désactivé.

Je voudrais être seulement capable de supprimer le projet lorsque l'utilisateur a ajouté le nom du projet:

$('.delete_project_btn').click(function(e){ 
    if($(this).hasClass('disabled')){ 
     console.log('preventing link click'); 
     e.preventDefault(); 
    }else{ 

    } 
    }); 

    $('.delete_project_text_area').blur(function(){ 
     if($(this).val() == <%[email protected]%>){ 
     $('.delete_project_btn').removeClass('disabled'); 
     }else{ 
     if(!$('.delete_project_btn').hasClass('disabled')){ 
      $('.delete_project_btn').addClass('disabled'); 
     } 
     } 
    }); 

Je suis en mesure de voir le message du journal « lien empêcher clic » quand je clique le bouton "Supprimer le projet" sans avoir entré le nom du projet, mais il est toujours en train de supprimer le projet.

Comment désactiver un link_to de manière conditionnelle?

+0

Pour faire bonne mesure, avez-vous essayé aussi faire 'return false;' après le 'e.preventDefault();'? – sjagr

Répondre

0

Je fini par enlever le link_to original et le remplacer par un bouton factice, ajoutant seulement le lien une fois que l'utilisateur a tapé le titre complet du projet:

<div class="modal-footer"> 
    <button type="button" class="btn btn-cancel" data-dismiss="modal" aria-hidden="true">Cancel</button> 
    <button class="btn btn-danger delete_project_btn disabled">Delete Project</button> 
    </div> 
</div> 

<script type="text/javascript"> 

    $('.delete_project_text_area').bind('input propertychange', function(){ 
     if($(this).val() == "<%[email protected]%>"){ 
     $('.delete_project_btn').replaceWith('<%=link_to "Delete Project", @project, :method=> :delete, :class=>"btn btn-danger delete_project_btn"%>'); 
     }else{ 
     if(!$('.delete_project_btn').hasClass('disabled')){ 
      $('.delete_project_btn').replaceWith('<button class="btn btn-danger delete_project_btn disabled">Delete Project</button>'); 
     } 
     } 
    }); 
</script>