2017-08-04 76 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調用複選框。 –