Posted by hophuoctu on March 23, 2012 at 4:55pm
EM sử dụng #ajax trong drupal nhưng khi nó goi xong thi nó render các element lai khác vậy các bác.
Ví dụ:
<?php
$form['res_form']['res_wrapper'] = array(
'#type' => 'markup',
'#prefix'=>'<div id = "res_wrapper">',
'#suffix' =>'</div>',
);
$form['res_form']['res_wrapper']['res_name'] = array(
'#type' => 'select',
'#title' => t('Select Restaurant : '),
'#options' => loadRestaurants(),
'#required' => TRUE,
'#ajax' => array(
'callback' => 'selectRestaurant',
'wrapper' => 'res_wrapper',
'method' => 'remove',
//'effect' => 'fade',
),
);
$form['res_form']['res_wrapper']['sales_status'] = array(
'#type' => 'select',
'#title' => t('Booking Status : '),
'#options' => bookingOperationStatusList(),
'#required' => TRUE,
'#default_value' => array(1),
);
$form['res_form']['res_wrapper']['payment_status'] = array(
'#type' => 'select',
'#title' => t('Payment Status : '),
'#options' => bookingPaymentStatus(),
'#required' => TRUE,
'#default_value' => array(1),
);
$form['res_form']['res_wrapper']['other_request'] = array(
'#type'=>'textarea',
'#title'=> t('Other Request : '),
);
$form['res_form']['res_wrapper']['add_menu'] = array(
'#type' => 'submit',
'#submit' => array('retaurants_form_submit'),
'#value' => t('Add Menu'),
'#attributes'=>array('class'=>array('add_res_menu')),
'#ajax' => array(
'callback' => 'addResMenu',
'wrapper' => 'res_menu_wrapper',
'method' => 'replace',
//'effect' => 'fade',
),
);
?>function gọi khi change select bõ.
function selectRestaurant(&$form,&$form_state){
return $form['res_form']['res_wrapper'];
}
Nó đã gọi thành công nhưng khi mà render ra lại thì nó lại thêm --2 vào cái id cho những phần tử render ra nên em không thể gọi #ajax lần thứ 2 được nữa. Cái #ajax em dùng là replace. còn em dùng remove thì nó không thêm --2 nữa nhưng nó lại không call được ajax nữa. Em không hiểu vì sao.
Các bác nào có kinh nghiệm trong vụ này thì chỉ giúp em cách với ah. thanks.
Comments
Nếu nó lại render ra cái ID
Nếu nó lại render ra cái ID đó thêm lần nữa, thì bạn unset cái #prefix và #suffix trước khi render ra nhé.
Em hỏi câu hơi gà tí ah.
Em hỏi câu hơi gà tí ah. Unset như thế nào và write vào cái hook nào ah.
Vì như ví dụ em đưa thì khi unset cái thẻ div đó thì nó sẽ remove tất cả những element nó chứa thì sao ah.
Mong sự giúp đỡ.
Nó rend ra thế nào ?
Bạn cóp nguyên cái Ajax nó đã chạy ra xem nào ... mình thạo javascript tí chứ mình không thạo lắm cái hàm mà bạn viết ... hì ... cậu cứ post cái mã java ra tớ xem cho nhé !
My blog: Jamviet.com, Hỏi đáp trực tuyến, váy dài
giúp với
em có đoạn code về ajax như thế này
function findaprogram_nameform($form, &$form_state) {
$form['#attributes'] = array('class' => 'webform-client-form');
}
function findaprogram_ajax_callback($form, $form_state) {
return $form['program'];
}
function findaprogram_loca_options() {
$result = db_query("SELECT term.name, url.field_ma_url_value FROM {field_data_field_ma_url} url, {taxonomy_term_data} term, {taxonomy_term_hierarchy} term_h WHERE term_h.tid = term.tid and term_h.parent = 0 and term.tid = url.revision_id");
$loca[none] = t('Select Location');
foreach ($result as $record) {
$loca[$record->field_ma_url_value] = $record->name;
};
return $loca;
}
function findaprogram_program_options($key = '') {
if ($key == 'viet-nam'){
$result = db_query("SELECT term.name, url.field_ma_url_value FROM {field_data_field_ma_url} url, {taxonomy_term_data} term, {taxonomy_term_hierarchy} term_h WHERE term_h.tid = term.tid and term_h.parent = 128 and term.tid = url.revision_id");
$program[none] = t('Select Program (1-6)');
foreach ($result as $record) {
$program[$record->field_ma_url_value] = $record->name;
};
return $program;
}
else if ($key =='usa'){
$result = db_query("SELECT term.name, url.field_ma_url_value FROM {field_data_field_ma_url} url, {taxonomy_term_data} term, {taxonomy_term_hierarchy} term_h WHERE term_h.tid = term.tid and term_h.parent = 132 and term.tid = url.revision_id");
$program[none] = t('Select Program (1-6)');
foreach ($result as $record) {
$program[$record->field_ma_url_value] = $record->name;
};
return $program;
}
else {
$program[none] = t('Select Program (1-6)');
return $program;
}
}
khi change select nó ko chạy ra kết quả. Ai biết em sai chổ nào ko giúp với