Лучший способ получить идентификатор из формы отправки Javascript / Django - PullRequest
0 голосов
/ 10 марта 2012

В настоящее время то, что я кодировал, работает, но кажется довольно грубым.В основном вот что у меня есть (упрощенно):

JQuery ready:

<script type="text/javascript">

    $(document).ready(function() {
        $('div.partDelete').click(function() {

        // TODO this seems like a dirty hack
        var split = this.id.split('_');
        if(split.length == 3) {
            $('#part_id').val(split[0]);
            alert($('#part_id').val());
            $('#removePartForm').submit();
        } else {
            alert('There was a problem removing the selected part');
        }
    });

</script>

Используемая форма:

<form id="removePartForm" action="{% url remove_part %}" method="post">
    <input type="hidden" id="part_id" name="part_id" value="-1" />

    {% for part in current_build.parts.all %}
        <div id="{{ part.id }}_part_id" class="partDelete">remove</div>
    {% endfor %} 
</form>

Все, что я пытаюсь сделать,установите скрытый ввод, чтобы взять part.id, который был выбран пользователем, чтобы я мог использовать его в своих представлениях.

Насколько я знаю, это правильный путь, но я простоесть чувство, что это не так.Я новичок в Django & JQuery, поэтому для этого могут быть встроенные функции, которых я еще не нашел.

Спасибо за любые предложения, которые у вас могут быть!ответ ниже)

Javascript:

$('div.partDelete').click(function() {
    var selected_id =$(this).data("id");
    $('#part_id').val(selected_id);
    $('#removePartForm').submit();
});

HTML изменения:

<div class="partDelete" data-id="{{ part.id }}">remove</div>

1 Ответ

3 голосов
/ 10 марта 2012

Прежде всего; Идентификаторы не должны начинаться с цифры (http://www.w3.org/TR/html4/types.html#type-name).

Кроме того, вы обычно используете атрибут data- * для установки идентификаторов для связи с JS со стороны сервера. Атрибут data- * может быть чем угодно. Таким образом, data-foo = "" является допустимым атрибутом.

Пример:
HTML:

<div class="item" data-id="{{ part.id }}">
    <p>Foo</p>
</div>

Javascript:

$(function () { // same as document read

    $(".button-class").on("click", function () {
        // Here "this" will be the element
        var id = $(this).data("id"); // same as getting attribute data-id
        // Could also use $(this).attr("data-id")
    });
});

Надеюсь, это поможет.

Редактировать: перемещенный комментарий, чтобы сделать его более понятным, изменил пример, чтобы быть более специфичным для проблемы ОП

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...