2016-02-11 2 views
0

Мне нужно выполнить одну функцию JS после другой последовательности. Я могу выполнять эти функции индивидуально, и они работают, но когда я помещаю их в последовательность, я получаю только openPatient(), а openMessage() не exicute. Мои JS функцииПоследовательный вызов функции JS не выполняется

function openPatient() { 
myRestoreSession(); 
opener.top.RTop.document.location.href = '../patient_file/summary/demographics.php?set_pid=<?php echo attr($ptid); ?>'; 
} 

function openMessage(messageid) { 
myRestoreSession(); 
document.location.href = 'upload_form.php?messageid=' + messageid; 
} 

Мой вызов функции:

echo " onclick=\"openPatient().then(openRequest(" . 
    "'" . addslashes($postid)  . "'," . 
    "'" . addslashes($v1[1]['type']) . "'" . 
    "))\">" . text($v1[1]['datetime']) . "</td>\n"; 

существует Этот вызов функции в этом процессе:

<?php 
// Generate a table row for each pending portal request or message. 
// This logic merges requests with messages by date. 
$v1 = each($result['list']); 
$v2 = each($result['messages']); 
while ($v1 || $v2) { 
    echo " <tr class='detail' bgcolor='#ddddff'>\n"; 
    if (!$v2 || $v1 && $v1[1]['datetime'] < $v2[1]['datetime']) { 
    $postid = $v1[1]['postid']; 
    $ptname = patientNameFromLogin($v1[1]['user']); 

    // Get the portal request data. 
    if (!$postid) die(xlt('Request ID is missing!')); 
    $result2 = cms_portal_call(array('action' => 'getpost', 'postid' => $postid)); 
    if ($result2['errmsg']) { 
     die(text($result2['errmsg'])); 
    } 

    // Look up the patient in OpenEMR. 
    $ptid = lookup_openemr_patient($result2['post']['user']); 

    echo " <td>" . text($v1[1]['user']) . "</td>\n"; 
    echo " <td style='cursor:pointer;color:blue;' onclick=\"openPatient()\">" .text($ptname  ) . "</td>\n"; 
    echo " <td style='cursor:pointer;color:blue;'"; 
    echo " onclick=\"openPatient().then(openRequest(" . 
     "'" . addslashes($postid)  . "'," . 
     "'" . addslashes($v1[1]['type']) . "'" . 
     "))\">" . text($v1[1]['datetime']) . "</td>\n"; 
    echo " <td>" . text($v1[1]['type' ]) . "</td>\n"; 
    echo " <td align='center'><input type='checkbox' name='form_req_cb[" . 
     attr($postid) . "]' value='" . attr($postid) . "' /></td>\n"; 
    $v1 = each($result['list']); 
    } 
    else { 
    $messageid = $v2[1]['messageid']; 
    $ptname = patientNameFromLogin($v2[1]['user']); 
    echo " <td>" . text($v2[1]['user']) . "</td>\n"; 
    echo " <td>" . text($ptname  ) . "</td>\n"; 
    echo " <td style='cursor:pointer;color:blue;'"; 
    echo " onclick=\"openMessage(" . 
     "'" . addslashes($messageid)  . "'" . 
     ")\">" . text($v2[1]['datetime']) . "</td>\n"; 
    echo " <td>" . text($v2[1]['user'] == $v2[1]['fromuser'] ? 
     xl('Message from patient') : xl('Message to patient')) . "</td>\n"; 
    echo " <td align='center'><input type='checkbox' name='form_msg_cb[" . 
     attr($messageid) . "]' value='" . attr($messageid) . "' /></td>\n"; 
    $v2 = each($result['messages']); 
    } 
    echo " </tr>\n"; 
} 
?> 

Я мнимая часть проблемы может быть, что openPatient() открывает в другом окне. Возможно, это теряет фокус. Любые советы для исправления этого будут оценены.

EDIT:

То, что я пытался и помогает добавляет return this; к openPatient():

function openPatient() { 
myRestoreSession(); 
opener.top.RTop.document.location.href = '../patient_file/summary/demographics.php?set_pid=<?php echo attr($ptid); ?>'; 
return this; 
} 

Это затем выполняет следующую функцию, но следующая функция выполняется слишком рано. ему нужно дождаться, когда openPatient() будет полностью загружен до выполнения функции openMessage(). Я попытался добавить setTimeout(wait, 1000);, но затем openMessage() не выполняется вообще.

+0

Что означает 'echo'd обработчик события на самом деле в конечном итоге выглядит как на странице? Этот PHP невозможно прочитать или отладить. – ssube

+0

Я добавлю еще код. –

ответ

0

Решение:

звонка:

echo " <td style='cursor:pointer;color:blue;'"; 
    echo " onclick=\"openPatient();setTimeout(function(){openRequest(" . 
     "'" . addslashes($postid)  . "'," . 
     "'" . addslashes($v1[1]['type']) . "'" . 
    ")}, 2500);\">" . text($v1[1]['datetime']) . "</td>\n"; 

Функции:

function openPatient() { 
myRestoreSession(); 
opener.top.RTop.document.location.href = '../patient_file/summary/demographics.php?set_pid=<?php echo attr($ptid); ?>'; 
return this; 
} 

function openMessage(messageid) { 
myRestoreSession(); 
document.location.href = 'upload_form.php?messageid=' + messageid; 
} 

Ключи к успеху: return this; и использование анонимной функции с setTimeout в вызове.

Сообщения, которые помогли: What does "return this" do within a javascript function? setTimeout delay not working

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