2017-08-04 78 views
1

我有一个名为decay的列。在列中将有过去的日期或NULL。如果有日期,则表示物体已经离开轨道,或者物体仍在轨道中。Laravel - 复选框过滤如果为空AJAX jQuery

我想要做的是创建一个复选框,允许我筛选我的数据库,以显示轨道中的对象(列中的NULL)或衰减的对象(列中的日期)。

我已经为我的Laravel Blade文件,我的路线和页面的控制器创建了一个简单的复选框。我只需要Javascript和Controller语句的帮助来过滤它。

刀片:

<span><input type="checkbox" name="in-orbit" value="in-orbit">In Orbit</span> 
<span><input type="checkbox" name="decayed" value="decayed">Decayed</span> 

的Javascript:

$('#decayed').on('change', function() { 
    $value = $(this).val(); 
    $.ajax({ 
    type: 'get', 
    url: '{{$launchsitename->site_code}}', 
    data: { 
     'search': $value 
    }, 
    success: function(data) { 
     $('#launchsatdisplay').html(data); 
    } 
    }); 
}); 
+0

请张贴相关的刀片,HTML和JS您使用。最有可能你只需要一个简单的'arrayOfObjects.filter((o)=> o.decayed == null)'在javascript中或等效的php – erapert

+0

@erapert我发布了刀片文件。我只需要帮助创建Javascript。 –

+0

你能发布一些更多的周边代码吗?这些跨度是呈现在刀片循环中还是全部是JavaScript? – erapert

回答

1

试试这个:

<div> 
    <label for="search">Search:</label> 
    <input type="text" id="search" name="search"><br> 
    <label for="decayed">Decayed:</label> 
    <input type="checkbox" id="filter-for-decayed" name="decayed"><br> 
    <div id="launchsatdisplay"> 
     <!-- javascript will put the results here --> 
    </div> 
</div> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
$(function() { 
    var searchTerm = '', // keyup on #search fills this in 
     updateData = function() { 
      // called after ajax has completed successfully 
      var displayData = function (searchData) { 
       var $display = $('#launchsatdisplay'), 
        checkbox = document.getElementById ('filter-for-decayed'), 
        dataToDisplay = searchData; 

       // if the checkbox is checked then we'll filter for 
       // any items that are decayed 
       // (decayed == null means the object has NOT decayed) 
       if (checkbox.checked) { 
        dataToDisplay = dataToDisplay.filter (function (d) { 
         return d.decayed != null; 
        }); 
       } 

       // clear the display area 
       $display.html (''); 

       // insert spans that hold the raw data 
       // notice that "d" here is each data item 
       // you can get fancy with how d is displayed 
       dataToDisplay.forEach (function (d, i) { 
        $display.append (`<span>${d}</span>`); 
       }); 
      }; 

      // now to actually fetch the data from the server 
      $.ajax ({ 
       type: 'GET', 
       url: '{{$launchsitename->site_code}}', 
       data: { 'search': searchTerm } 
      }).success (function (data) { 
       displayData (data); 
      }); 
     }; 

    // called when the checkbox is changed 
    $('#filter-for-decayed').on ('change', function() { 
     updateData(); 
    }); 

    // called when the search field is typed into 
    $('#search').on ('keyup', function() { 
     searchTerm = $(this).val(); 
     updateData(); 
    }); 
}); 
</script> 
+0

我想用AJAX过滤我的数据库。我不认为我能用刀片式的“foreach”声明做到这一点? –

+0

正确的,如果你使用的是AJAX,那么你必须使用JavaScript,一个PHP /刀片的foreach将无法正常工作。 – erapert

+0

我试过你的代码,它的输入部分工作。不幸的是,我无法使用复选框进行过滤。从您提供的代码中,我可以看到该函数被封装在输入中。我想要的是输入和复选框是分开的。所以当我点击复选框时,它会过滤数据库中的列,而不会在其他任何地方进行中继。我认为一旦你修改了JS,这将是正确的。我基本上需要一个简单的AJAX调用复选框。 –