Vous pouvez lier l'événement change au champ de plusieurs manières. Ciblez à travers les en-têtes td, ou modifiez la colonne, et dans le champ "Attributs d'élément" vous pouvez ajouter une classe (par exemple "fireAjax"). Vous pouvez ensuite lier l'événement avec un code javascript ou le faire via une action dynamique.
Vous pouvez faire un appel ajax dans l'une de ces 2 formes: par htmldb_Get ou jquery.post:
$('td[headers="ENAME"] input').change(function(){
var ajaxRequest = new htmldb_Get(null , $v('pFlowId') , 'APPLICATION_PROCESS=get_job' , $v('pFlowStepId'));
ajaxRequest.addParam('x01', $(this).val());
ajaxResult = ajaxRequest.get();
$(this).closest("tr").find("td[headers='JOB'] input").val(ajaxResult);
});
OU
$('td[headers="ENAME"] input').change(function(){
var that = this;
$.post('wwv_flow.show',
{"p_request" : "APPLICATION_PROCESS=get_job",
"p_flow_id" : $v('pFlowId'),
"p_flow_step_id" : $v('pFlowStepId'),
"p_instance" : $v('pInstance'),
"x01" : $(this).val()
},
function(data){
var eJob = $(that).closest("tr").find("td[headers='JOB'] input");
eJob.val(data);
},
"text"
);
});
Avec ce processus d'application, défini sur la page avec point d'exécution "AJAX Callback":
Nom: get_job
DECLARE
l_job emp.job%TYPE;
BEGIN
SELECT job
INTO l_job
FROM emp
WHERE ename = apex_application.g_x01;
htp.p(l_job);
EXCEPTION WHEN no_data_found THEN
htp.p('');
END;
Rappelez-vous, la manipulation des erreurs et le retour dans ce processus est à vous! Assurez-vous d'attraper les erreurs courantes telles que no_data_found
et/ou too_many_rows
. S'ils se produisent et ne sont pas pris au piège, les chances sont grandes que vous rencontrerez des erreurs javascript parce que votre code de rappel javascript ne peut pas gérer l'erreur (qui en apex sera une page entière html avec le message d'erreur).
En outre, comme vous pouvez le voir, j'utilise la variable x01
, qui est l'une des 10 variables temporaires globales de l'apex. De cette façon, il n'est pas nécessaire d'utiliser un élément de page et de soumettre la valeur à l'état de session pour cela.
Si vous voulez mettre ce code dans une action dynamique, vous pouvez. Choisissez "Change" comme événement et jQuery selector si vous optez pour une action dynamique, et en tant que vrai choix d'action, exécutez le code javascript. Vous pouvez ensuite mettre le code de fonction ici. À l'exception que $(this)
devra être $(this.triggeringElement)
colonne 'description' dans ma forme tabulaire est' autocomplete'. c'est aussi utiliser appel ajax. quand je choisis la description de la liste d'autocomplete, ceci ne fonctionne pas. Si j'écris une description complète sans sélectionner dans la liste de saisie semi-automatique, c'est un travail. comment pourrais-je résoudre ce problème? – Bishan
Quel type de saisie semi-automatique avez-vous? Un jQuery? Si oui, avez-vous quelque chose lié aux événements de la saisie semi-automatique qui pourrait annuler quelque chose? L'événement de changement devrait simplement se déclencher pour un élément de saisie semi-automatique, je l'ai essayé moi-même avec à la fois l'événement de changement pour la saisie semi-automatique et un événement de modification lié à l'élément. – Tom
jQuery un avec Ajax rappeler – Bishan