万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    jQueryで複数のform選択してそこにsubmitを付与する

    今はこのようにformをHTMLで作っている。(Djangoのテンプレートなので変なのも含まれてるのはご勘弁)

    <form name="ban_fm" action="{% url 'ajax_ban' %}" method="post">
        {% csrf_token %}
        <input type="hidden" name="user_profile_id" value="{{ item.id }}" />
        <button class="btn btn-sm btn-danger btn" type="submit">
        無視{% able_ban user item.user %}</button>
    </form>

    そして、僕はセレクタ?はこのように書いた。

        // nameバージョン(home.html用)
        $("form[name=ban_fm]").submit(function() {
            var $form = $(this);
            // 必ずreturn
            return ban_ajax($form);
        });

    $("form[name=ban_fm]").submit()のようにしたら、 formというタグで、nameがban_fmのもので出来る。 しかも、getElementsByNameは配列?とかで返ってきて1つのオブジェクトだから hoge[0]とかで1つだけ指定してたと思うが、 特にしなくてそのまま.submit()メソッドチェーンでつなげてもOKだった。

    その後の処理は以下のものだが、先ほどの処理でvar $form = $(this);のようにし、 ban_ajax($form);として引数に渡すと、 self変数に格納されてくれた。 これをなぜか、`ban_ajax(this);にするとうまくいきそうになかった。

        // 無視(ボタンクリックでAjax)
        // 共通で使うため独立にした
        var ban_ajax = function(self) {
            console.log(self.attr('action')),
            $.ajax({
                'url':self.attr('action'),
                'type':'POST',
                'data':self.serialize(),
                'dataType':'json',
                 // 通信が成功したら動く処理で、引数には返ってきたレスポンスが入る
                'success':function(response) {
                    // レスポンスからデータを取り出し
                    console.log("result: " + String(response.result));
                    if (response.result == 0) {
                        // 無視できたとき
                        // ボタンの文字を変える
                        self.children('button').text("無視解除");
                    } else if (response.result == 1) {
                        // 無視から外したとき
                        // ボタンの文字を変える
                        self.children('button').text("無視登録");
                    }
                    alert(response.message);
                },
            });
            return false;
        };