【问题标题】:How do I return negative value from data-value attribute?如何从数据值属性返回负值?
【发布时间】:2015-12-14 20:53:59
【问题描述】:

我有一个带有data-value 属性的upvote/downvote 按钮,其中1-1 作为值。

我正在使用$(this).children().attr('data-value') 获取值并将其提交到数据库,但即使我所做的只是投反对票,它也总是返回一个正值。

我也尝试过使用$(this).children().data('value'),结果相同。

我正在使用jquery.upvote.js

表格

{!! Form::open(['url' => 'votes', 'class' => 'votes']) !!}
   <div class="upvote topic" data-post="{{ $post->id }}">
    <a class="upvote vote" data-value="1"></a>
    <span class="count">0</span>
    <a class="downvote vote" data-value="-1"></a>
   </div>
{!! Form::close() !!}

Javascript

$('.topic').upvote();

$('.topic').on('click', function (e) {
    e.preventDefault();
    var data = {value: $(this).children().attr('data-value'), post_id: $(this).data('post')};

    var clicked_button = $(this).children();

    if($(clicked_button).hasClass('downvote-on')) {
        $.ajaxSetup({
        headers: {
        'X-CSRF-TOKEN': $('[name="_token"]').val()
      }
    });
        $.ajax({
            type: "POST",
            url: 'http://localhost/laravel-5/public/votes',
            dataType: 'JSON',
            data: data
     });
     } else if ($(clicked_button).hasClass('upvote-on')) {
        $.ajaxSetup({
            headers: {
            'X-CSRF-TOKEN': $('[name="_token"]').val()
           }
     });
        $.ajax({
            type: "POST",
            url: 'http://localhost/laravel-5/public/votes',
            dataType: 'JSON',
            data: data
     });
    }
   });

【问题讨论】:

  • 试试这个。 $(".downvote").getAttribute("data-value");
  • 我收到Uncaught TypeError: $(...).getAttribute is not a function
  • Praveen 有我认为的观点。

标签: javascript jquery html ajax laravel


【解决方案1】:

仔细检查您的代码后,我可以看到处理程序附加到&lt;div&gt; 而不是&lt;a&gt;。当有多个&lt;a&gt; 标签时,这将取最后一个。因此,请确保将事件处理程序附加到 &lt;a&gt; 而不是其他任何人。

$('.topic .vote').on('click', function (e) {
    e.preventDefault();
    var data = {value: $(this).attr('data-value')

尝试改用$(element).data("value")

看看下面的小提琴:

$(function () {
  $("a").click(function () {
    event.preventDefault();
    alert("attr: " + $(this).attr("data-value") + "\ndata: " + $(this).data("value"));
  });
});
* {box-sizing: border-box; margin: 0; padding: 0; list-style: none; font-family: 'Segoe UI';}
a {text-decoration: none;}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<p><a href="#" data-value="-1">Get Data (-1)</a></p>
<p><a href="#" data-value="1">Get Data (1)</a></p>

【讨论】:

  • 我无法将事件附加到 &lt;a&gt; 标签,因为我仍然需要从另一个标签获取 post_id
  • 也许您也可以将 postid 添加到标签中。
  • @Halnex 你能委派这些活动吗?从哪里获得post_id?使用$(this).closest("div").find(whatever)?
  • 我刚试过你的sn-p,它停止了一起提交数据库。我必须说我正在使用 jquery.upvote.js 来显示投票按钮,它需要在 div 上调用 topic 类才能工作。
  • 使用父函数获取相应元素的父div,然后获取属性。
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2022-11-21
  • 2010-11-25
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多