Bir Django Formunun belirli bir alanında onclick olayında eylemci olarak nasıl bir JavaScript işlevi ayarlanır. Mümkün mü?Django form giriş alanında bir olay işleyicisi nasıl ayarlanır
Herhangi bir ipucu takdir edilecektir.
Bir Django Formunun belirli bir alanında onclick olayında eylemci olarak nasıl bir JavaScript işlevi ayarlanır. Mümkün mü?Django form giriş alanında bir olay işleyicisi nasıl ayarlanır
Herhangi bir ipucu takdir edilecektir.
bu işlemi otomatik hale arıyorsanız, alana yönelik özel bir widget oluşturabilirsiniz. Widget sınıfında, bir işleme yöntemini, olay bağlama kodunu da döndürecek şekilde tanımlayacaksınız.
class CustomWidget(forms.TextInput):
class Media:
#js here
js = ('js/my_js.js',)
def render(self, name, value, attrs = None)
output = super(CustomWidget, self).render(name, value, attrs)
#do what you want to do here
output += ...
return output
jQuery gibi bir JavaScript kitaplığı kullanmayı düşünmenizi öneririm. Here, tıklama olayını jQuery'ye bağlayan bağlantıdır. Django adları şöyle click olayı için Django formunda my_field_name
bağlayabilirsiniz giriş alanlarının tümünü beri:
$("form input[name='my_field_name']").click(function() {
// Handle the click event here
});
Ne Bunun için yapmanız geçerli:
YAHOO.util.Event.addListener(id_myField, "click", myClickEventHandler, myOptionalData);
See da YUI 2: Event Utility
Ben JavaScript kullanarak tercih: YUI kullanma
class MyForm(forms.Form):
stuff = forms.ChoiceField(
[('a','A'),('b','B')],
widget = forms.Select(attrs = {
'onclick' : "alert('foo !');",
}
)
, böyle yapabilir Kütüphane, tarayıcı tarafı JS kodunu sunucu tarafındaki Django'dan güzel bir şekilde ayırdığı için.
Ghislain Leveque'nin cevabını kullanarak JQuery yaklaşımını çektim. Bu şekilde, sayfa yüklendiğinde olay işleyicisini tetikleyebildim. Benim javascript olarak
class MyForm(forms.Form):
stuff = forms.ChoiceField(
[('a','A'),('b','B')],
widget = forms.Select(attrs = {
'widget_to_bind' : "True",
}
)
:
function myFunction() {
var source = $(this); // Widget element
}
$('[widget_to_bind=True]').change(myFunction);
$('[widget_to_bind=True]').trigger("change");
bir tema üzerine Varyasyon:
class CategoriesForm(forms.Form):
stuff = forms.MultipleChoiceField(
choices=([(pt.id, pt.name) for pt in PaymentType.objects.order_by('name')]),
widget=forms.SelectMultiple(attrs={'size': '20', 'class': 'mc_payment_type'})
)
JQuery:
<script language="javascript">
$('.mc_payment_type').change(function() {
console.log('payment type selected: ' + $(this).find('option:selected').val());
</script>
Ghislain Leveque Cevap bana çalışır, ancak django içinde 1.9 Bunu böyle yaptım:
class myForm(forms.ModelForm):
class Meta:
model = USER
fields = ["password", "idCity"]
widgets = {
"password": forms.PasswordInput(),
"idCity": forms.Select(attrs={'onchange': "alert('foo !');"})
}