2016-07-22 7 views
0

Ich habe eine Autocomplete, die den Wert #resource_id auf select Ereignis setzen wird. Wenn ein select Ereignis eintritt, aber dann der Benutzer weiter bearbeitet #resourceFile, möchte ich #resource_id aus dem Posten entfernen (oder auf Null oder NULL setzen, damit der Server weiß). Das folgende Skript funktioniert nicht, da das Ereignis change nach dem Ereignis select auftritt, auch wenn #resourceFile später nicht geändert wird.Wert nur bei jQueryUI AutoVervollständigen auswählen Ereignis

Wie kann dies erreicht werden?

$(".addResource").click(function() {$("#dialog-addResource").dialog("open");}); 
$("#dialog-addResource").dialog({ 
    autoOpen: false, resizable:false, height: 200, width: 600, modal: true, 
    open: function() { 
     $('#resourceFile').val(''); 
     $('#resource_id').val(''); 
    }, 
    buttons: [ 
     { 
      text: 'Save', 
      click: function() { 
       var data=$(this).find($('#resource_id').val()?':input':':input:not(#resource_id)').serializeArray(); 
       console.log(this,data) 
       $.post('/pages_back/display/addResource',data,function (rsp){ 
        console.log(rsp); 
        },'json'); 
      } 
     }, 
     { 
      text: 'Cancel', 
      click : function() {$(this).dialog("close");} 
     } 
    ] 
}); 

$("#resourceFile").autocomplete({ 
    source: "/pages_back/display/getResources", 
    minLength: 2, 
    select: function(event, ui) { 
     console.log('set'); 
     $('#resource_id').val(ui.item.id); 
    }, 
    change: function(event, ui) { 
     console.log('changed'); 
     $('#resource_id').val(''); //Is it better to set to null or use removeAttr('value')? 
    } 
}); 

.

<div id="dialog-addResource" title="Add Resource" style="display:none"> 
    <span>Add Resource: </span> 
    <input type="text" id="resourceFile" name="file" /> 
    <input type="hidden" id="resource_id" name="resource_id" /> 
    <input type="hidden" name="page_id" value="{{ id }}" /> 
</div> 
+0

Mit „resource bearbeiten weiter“ meinen Sie setzt Zeichen aus dem Autovervollständigen-Feld, oder etwas anderes hinzuzufügen oder zu entfernen? – BobRodes

+0

@BobRodes Genau wie du gesagt hast. – user1032531

Antwort

0

Nicht eine sehr elegante Lösung, aber die folgende funktioniert:

$("#resourceFile").autocomplete({ 
    source: "/pages_back/display/getResources", 
    minLength: 2, 
    select: function(event, ui) { 
     console.log('set',ui); 
     $('#resources_id').val(ui.item.id).data('name',ui.item.value); 
    }, 
    change: function(event, ui) { 
     console.log('changed'); 
     if($('#resources_id').data('name')!=$('#resourceFile').val()) { 
      $('#resources_id').val(''); //Is it better to set to null or use removeAttr('value')? 
     } 
    } 
}); 
+0

Dieses "Daten" -Feature ist in einer ziemlich großen Bandbreite von Edge-Case-Szenarien nützlich. :) – BobRodes

+0

@BobRodes Ja, das tut es! Ich dachte daran, eine globale Variable zu verwenden, aber das ist noch weniger elegant. Danke – user1032531

+0

Ja, stimmt. Ich fand "Daten" besonders nützlich, wenn ich mit untergeordneten Tabellen in Dialogfeldern arbeite, um die übergeordnete ID in den Kontext der untergeordneten Tabelle zu übergeben. – BobRodes