Saya bereksperimen dengan formulir JavaScript dan Drupal. Saat ini saya sedang mencoba membuat tombol dalam bentuk administrasi modul yang akan menggunakan JavaScript untuk menambahkan opsi ke daftar pilih. Masalah yang saya hadapi adalah ketika saya mengklik tombol, JavaScript saya dipanggil tetapi seluruh bentuk di-refresh. Saya telah melihat referensi API Formulir berpikir ada semacam atribut yang dapat saya atur pada tombol untuk menghentikannya tetapi tidak menemukan apa pun. Apakah ada cara saya dapat menghentikan tombol untuk menyegarkan halaman atau apakah ini jalan buntu?
$form['#attached']['js'] = array(
drupal_get_path('module', 'test').'/js/test.js',
);
$form['list'] = array(
'#type' => 'select',
'#options' => array(),
'#attributes' => array(
'name' => 'sellist',
),
'#size' => 4,
);
$form['add_button'] = array(
'#type' => 'button',
'#value' => 'Add',
'#attributes' => array(
'onclick' => "add_to_list(this.form.sellist, 'Append' + this.form.sellist.length);",
),
);
//JavaScript
function add_to_list(list, text) {
try {
list.add(new Option(text, list.length), null) //add new option to end of "sample"
}
catch(e) {
list.add(new Option(text, list.length));
}
}
Kode terakhir saya:
<?php
function jstest_menu() {
$items['admin/config/content/jstest'] = array(
'title' => 'JavaScript Test',
'description' => 'Configuration for Administration Test',
'page callback' => 'drupal_get_form',
'page arguments' => array('_jstest_form'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function _jstest_form($form, &$form_state) {
$form['list'] = array(
'#type' => 'select',
'#options' => array(),
'#size' => 4,
);
$form['text'] = array(
'#type' => 'textfield',
);
$form['add_button'] = array (
'#type' => 'button',
'#value' => t("Add"),
'#after_build' => array('_jstest_after_build'),
);
return $form;
}
function _jstest_after_build($form, &$form_state) {
drupal_add_js(drupal_get_path('module', 'jstest').'/js/jstest.js');
return $form;
}
JavaScript
(function ($) {
Drupal.behaviors.snmpModule = {
attach: function (context, settings) {
$('#edit-add-button', context).click(function () {
var list = document.getElementById('edit-list');
var text = document.getElementById('edit-text');
if (text.value != '')
{
try {
list.add(new Option(text.value, list.length), null);
}
catch(e) {
list.add(new Option(text.value, list.length));
}
text.value = '';
}
return false;
});
$('#edit-list', context).click(function () {
var list = document.getElementById('edit-list');
if (list.selectedIndex != -1)
list.remove(list.selectedIndex);
return false;
});
}
};
}(jQuery));
7
forms
javascript
Sathariel
sumber
sumber
definisi tombol form di bawah ini berfungsi untuk saya, #after_build berguna untuk memuat dalam javascript yang dapat melampirkan pengendali klik.
Kemudian javascript saya yang dimuat dalam file terpisah dengan fungsi after build, terlihat seperti:
sumber
Anda bisa menambahkan
return false
pernyataan setelah pemanggilan fungsi Anda, di dalam garis atribut elemen bentuk tombol:sumber
Idealnya, baca kemampuan bentuk AJAX (atau AHAH) Drupal sendiri. Intro yang benar-benar dasar di sini http://drupal.org/node/752056
Kalau tidak, saya terkejut itu menyegarkan halaman karena hanya 'tombol' bukan kiriman atau apa pun.
Apakah perlu javascript untuk mengembalikan false, seperti pada tautan tidak untuk menghentikannya melompat kembali ke bagian atas halaman?
sumber