2009-11-07 18 views

cevap

2

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 
4

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 
}); 
11

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 !');", 
      } 
     ) 
1

, böyle yapabilir Kütüphane, tarayıcı tarafı JS kodunu sunucu tarafındaki Django'dan güzel bir şekilde ayırdığı için.

0

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"); 
0

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> 
0

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 !');"}) 
     } 
İlgili konular