1

我无法弄清楚为什么我的 jQuery 脚本不起作用。我已经阅读了一堆 stackOverflows 但无法解决这个问题。

我有一个表单,当检查一个复选框时,我想启用具有ID的表单字段div_id_newLockName。如果未选中该复选框,我希望禁用表单字段并显示为灰色。该复选框的 iddiv_id_newNameBool我已经编写了我认为应该可以工作的代码,但它没有。我没有收到任何错误,这使得故障排除变得困难。我希望第二双眼睛可以提供帮助。可以在此处找到表格外观的图片:表格图片在这张图片中,“更改名称?” 复选框对应于div_id_newNameBool,并且“锁定名称”字符字段是我想要切换启用或禁用的内容。

base.html (包含 jQuery 脚本)

<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<style>
<!-- unimportant css stuff -->
</style>
<body class="w3-content" style="max-width:1200px">
    <!-- !PAGE CONTENT! -->
        {% block content %}{% endblock %}
    <!-- End page content -->
</div>
<script>
    $(document).ready(function(){
        if ($("#div_id_newNameBool").is(':checked')){
            $("#div_id_newLockName").prop("disabled", false);
        }
        else {
            $("#div_id_newLockName").prop("disabled", true);
            alert("DISABLED");
        }
    });
</script>
</body>
</html>

表单的 HTML 页面

{% extends "homepg/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <!-- Top header -->
    <header>
    </header>

    <form method="POST">
      <div class="w3-display-container w3-container">
              {% csrf_token %}
              <fieldset class="form-group" style="font-size:20px">
                  <legend class="border-bottom mb-4" style="font-size:20px, p">Edit Lock Information </legend>
                  {{ form|crispy }}
              </fieldset>
            <button type="submit" style="width: 200px; padding: 10px; left: 50%; margin:10px;">Change Lock</button>
          </div>
    </form>
{% endblock content %}

模型.py

class Lock(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    lockName = models.CharField(max_length=20)
    roomLoc = models.ForeignKey(Room, on_delete=models.CASCADE, null=True, blank=True)
    state = models.BooleanField(default=0)
    code1 = models.PositiveIntegerField(default=0, validators=[MinValueValidator(1000), MaxValueValidator(9999)])
    code2 = models.PositiveIntegerField(default=0, validators=[MinValueValidator(1000), MaxValueValidator(9999)])
    code3 = models.PositiveIntegerField(default=0, validators=[MinValueValidator(1000), MaxValueValidator(9999)])
    code4 = models.PositiveIntegerField(default=0, validators=[MinValueValidator(1000), MaxValueValidator(9999)])

    # create a dunder method to control how we want this to printed out

    def __str__(self):
        return self.lockName

表格.py

class changeLockForm(forms.Form):
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(changeLockForm, self).__init__(*args, **kwargs)
        self.fields['roomLoc'] = forms.ModelChoiceField(queryset=Models.Room.objects.filter(owner=None) | Models.Room.objects.filter(owner=user), label='Room Location')
        self.fields['lockName'] = forms.ModelChoiceField(queryset=Models.Lock.objects.filter(owner=None) | Models.Lock.objects.filter(owner=user), label="Current Lock Name")

    newNameBool = forms.BooleanField(label='Change Name? Y/N')
    newLockName = forms.CharField(min_length=2, max_length=20, label='Lock Name', disabled=True)
    #roomLoc = forms.ModelChoiceField(queryset=Models.Room.objects.filter(user=request.user), label='Room Location')
    state = forms.BooleanField(required=False, label='LOCKED/UNLOCKED')
    code1 = forms.IntegerField(initial=1000, min_value=1000, max_value=9999, label='First Code')
    code2 = forms.IntegerField(initial=1000, min_value=1000, max_value=9999, label='Second Code')
    code3 = forms.IntegerField(initial=1000, min_value=1000, max_value=9999, label='Third Code')
    code4 = forms.IntegerField(initial=1000, min_value=1000, max_value=9999, label='Fourth Code')
    class Meta:
        model = Models.Lock
        fields = ('lockName','newNameBool','newLockName','roomLoc', 'state', 'code1', 'code2', 'code3', 'code4')

    field_order = ['lockName', 'newNameBool', 'newLockName', 'roomLoc', 'state', 'code1', 'code2', 'code3', 'code4']

视图.py

def changeLock(request):
        if request.method == "POST":
            # if get post request will create form that has request.POST data!
            form = changeLockForm(request.POST, user=request.user)
            if form.is_valid():
                locksObj = Model.Lock()
                # will tell us if form valid when submitted
                # form.cleaned_data is a DICTIONARY
                tempBool = form.cleaned_data['newNameBool']
                if tempBool:
                    locksObj.lockName = form.cleaned_data['newLockName']
                elif not tempBool:
                    locksObj.lockName = form.cleaned_data['lockName']
                else:
                    print("WHOOPSIE! clearly I coded something wrong wtf")

                locksObj.state = form.cleaned_data['state']
                locksObj.roomLoc = form.cleaned_data['roomLoc']
                locksObj.code1 = form.cleaned_data['code1']
                locksObj.code2 = form.cleaned_data['code2']
                locksObj.code3 = form.cleaned_data['code3']
                locksObj.code4 = form.cleaned_data['code4']
                locksObj.owner = request.user
                # get the old alarm name
                allCodes = Model.Lock.objects.filter(owner_id=request.user)
                # old Alarm Name
                currentName = allCodes.values_list('lockName', flat=True)[0]
                # if the old alarm name and new alarm name aren't equal...
                # delete the old alarm entry
                entry = Model.Lock.objects.get(lockName=str(currentName))
                entry.delete()
                # replace it with the new data
                locksObj.save()
                messages.success(request, 'Lock ' + str(locksObj.lockName) + ' edited!')
                return redirect("status-page")
        else:
            # if not POST request, will create a blank form!
            form = changeLockForm(user=request.user)
        return render(request, 'users/changeLockForm.html', {'form': form})
4

0 回答 0