Each year the U.S. Senate and House of Representatives take thousands of votes, some to pass bills, resolutions, nominations, and treaties, and others on procedural matters such as on cloture and other motions. Not all votes are recorded, such as when there is no one opposed. This page shows the outcome of all recorded votes on the Senate floor and House floor. It does not include votes in committee.
Get an email every time Congress votes on a bill or other matter.
");
opt.find('input').attr('id', "searchform_field_" + field + "_" + j);
opt.find('input').attr('name', field);
if (values[j][0] !== null) // e.g. from NullBooleanField
opt.find('input').attr('value', values[j][0]);
else
opt.find('input').attr('value', '__NULL__');
opt.find('label').attr('for', "searchform_field_" + field + "_" + j);
if (values[j][0] == "__ALL__") {
opt.find('.name').text("All");
} else {
opt.find('.name').text(values[j][1]);
if (values[j][2])
opt.find('.count').text(make_count(values[j][2]));
}
if (values[j][3])
opt.attr("title", values[j][3]);
if (type == "checkbox") {
// restore checked status
if (postdata[field]) {
for (i in postdata[field]) {
if ((""+postdata[field][i]) == (""+values[j][0])) { // convert value to string
opt.find('input').attr('checked', '1');
if (postdata[field][i] != "__ALL__") has_default_value = false;
}
}
}
} else if (type == "radio") {
if (postdata[field] == (""+values[j][0])) // convert value to string
opt.find('input').attr('checked', '1');
if (postdata[field] != "__ALL__") has_default_value = false;
}
// check ALL if nothing is checked
if (!postdata[field] && values[j][0] == "__ALL__")
opt.find('input').attr('checked', '1');
node.append(opt);
}
} else if (type == "boolean") {
var count = 0;
node.attr('checked', field in postdata );
for (j in values)
if (values[j][0] == "true")
count = values[j][2];
if (count == 0) visible = false; // force hide
node.parent().find('span.count').text(make_count(count));
}
// On small-width screens, hide fields that have default values until the user wants to see them.
if (visible && should_hide_default_facets && has_default_value) {
field_container.attr("is-default-hidden", "true");
if (isinitial) field_container.hide(); else field_container.fadeOut();
} else {
// Set visibility from what we're told from the server side.
field_container.attr("is-default-hidden", "false");
field_container.toggle(visible);
}
}
// Show the "Show more options" link if we've hidden anything.
var has_hidden_facet = ($('#searchform *[is-default-hidden=true]').length > 0);
$('#show_more_options').toggle(has_hidden_facet);
// Don't show the facets until after the first time they are loaded.
$('#searchform > .fieldset').show();
$('#searchform .initial_loading').hide();
}
function show_more_options() {
$('#searchform *[is-default-hidden=true]').fadeIn();
$('#show_more_options').fadeOut();
return false; // cancel click
}
var default_search = { };
default_search["session"] = "308";
default_search["sort"] = "\u002Dcreated";
var current_page = 1;
var update_search_lock = false;
var prev_search = { };
function update_search(pagenum, pageinc, elem, isinitial) {
if (update_search_lock) return;
update_search_lock = true;
$('#searchform input').prop('disabled', true);
if (!pagenum && !pageinc) {
// When changing the search options, reset to first page.
pagenum = 1;
}
form = $('#searchform')[0];
if (elem && elem.type == "checkbox") {
// If any ALL is chosen, clear out the other options. If any other option is
// clicked, clear out the ALL.
for (var i = 0; i < form.elements.length; i++)
if (form.elements[i].checked && form.elements[i].name == elem.name && form.elements[i].value != elem.value)
if (elem.value == "__ALL__" || form.elements[i].value == "__ALL__")
$(form.elements[i]).prop('checked', false);
}
// Collect the POST data.
var postdata = { };
for (var i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == 'checkbox' && !form.elements[i].checked) continue;
if (form.elements[i].type == 'radio' && !form.elements[i].checked) continue;
if (form.elements[i].value == "__ALL__" || form.elements[i].value == "") continue;
// We should not facet on free-form text fields on the initial search because
// these entries can result in zero results, which messes up faceting because
// there will be no drill-down options. This can occur when the user navigates
// back to this page after doing a free-form search.
if (isinitial && form.elements[i].type == "text") continue;
name = form.elements[i].name;
if (name == "" || name == "undefined") continue;
if (form.elements[i].type == 'checkbox' && !form.elements[i].getAttribute('is-boolean')) {
if (postdata[name] == null) postdata[name] = Array();
postdata[name].push(form.elements[i].value);
} else {
postdata[name] = form.elements[i].value;
}
}
postdata["sort"] = $("#searchform_sort").val();
// Apply any initial search options.
if (isinitial) {
// The initial search combines the default faceting with the URL fragment.
var fragment_params = parse_qs.fragment();
for (var k in default_search) postdata[k] = default_search[k];
for (var k in fragment_params) postdata[k] = fragment_params[k];
for (var k in fragment_params)
if (fragment_params[k] == "__ALL__")
delete postdata[k]; // null is not sufficient
// Update the sort control.
if ("sort" in postdata)
$('#searchform_sort').val(postdata["sort"]);
}
// Copy just the faceting so far into a separate array, minus the parts that
// match the defaults, but explicitly setting __ALL__ for fields that have
// defaults that are overridden by being null.
var current_search = { };
var current_search_set = false;
for (var k in postdata) {
if (postdata[k] != default_search[k]) {
current_search[k] = postdata[k];
current_search_set = true;
}
}
for (var k in default_search) {
if (typeof postdata[k] == "undefined" && default_search[k]) {
current_search[k] = "__ALL__";
current_search_set = true;
}
}
if (pagenum)
postdata.page = pagenum;
else if (pageinc)
postdata.page = current_page + pageinc;
else
postdata.page = current_page;
postdata.faceting = "false";
postdata.allow_redirect = (isinitial ? "false" : "true"); // hit back after getting a redirect would generate an immediate redirect again, not helpful
postdata.do_search = 1; // always required
$("#loading_status").show();
$("#show_more").hide();
if (postdata.page == 1) {
$('.summary').hide();
$('.results').html("");
}
$.ajax(
{
url: document.location.pathname,
type: "GET",
dataType: "json",
data: postdata,
success: function(res) {
if (res.error) {
$('#searcherror').text(res.error);
$("#loading_status").hide();
} else if (res.redirect) {
window.location = res.redirect;
return;
} else {
// Display results.
var results_container = $('.results');
var results_html = res.results
.map(function(r) { return "" + r + "
\n" })
.join("");
// Prepare images to be lazy-loaded.
results_html = results_html.replace(/ src=/g, " data-src=");
results_container.append($("
" + results_html + "
"));
results_container.find('img').Lazy();
$('#searcherror').text('');
$('.summary').show();
$('.summary .total').text(addCommas(res.total));
$('.summary .noun').text(res.total == 1 ? "item" : "items");
$('.summary .searchdescr').text(res.description ? " for " + res.description : "");
$("#loading_status").hide();
$("#show_more").toggle(res.page < res.num_pages);
results_container.show();
if (pageinc) {
// If this was just a call to append more results fluidly to the bottom
// of the results list, there is no need to do any further work to
// update the facets.
} else if (res.total == 0) {
// Now we have a problem. If there are no results, then the facets
// are going to be messed up because there can be no drill-down.
// We got here because the user did a free-form text search that
// resulted in no answers. In this case, show the facets from the
// last successful search.
if (isinitial) {
// If we failed even on the initial search, either the fragment
// parameters or the query string parameters (=> default_search)
// may have yielded no results. Back off to all filters off.
prev_search = { };
}
prev_search.page = 1;
// Call the search twice, because we get facets in two parts.
prev_search.faceting = "false";
prev_search.do_search = 1; // always required
$.ajax({
url: document.location.pathname,
type: "GET",
dataType: "json",
data: prev_search,
success: function(res) {
if (res.error) return;
show_facets(postdata, res.options, isinitial);
}
});
prev_search.faceting = "true";
$.ajax({
url: document.location.pathname,
type: "GET",
dataType: "json",
data: prev_search,
success: function(res) {
if (res.error) return;
show_facets(postdata, res, isinitial);
}
});
} else {
// Updates checkboxes and radio buttons and the current values
// for selects, but in order to be fast we were not returned
// the other options for selects- that comes later.
show_facets(postdata, res.options, isinitial);
// After showing the main content and basic facets, show the full faceted results.
postdata.faceting = "true";
$.ajax({
url: document.location.pathname,
type: "GET",
dataType: "json",
data: postdata,
success: function(res) {
if (res.error) return;
show_facets(postdata, res, isinitial);
}
});
prev_search = postdata;
// Store the current search query in the hash so that the user can back-button to
// this page and we will try to restore the query options.
if (!current_search_set) {
if (window.location.hash) // don't set if already blank
window.location.hash = "#_"; // setting to blank jumps page to top
} else {
window.location.hash = "#" + form_qs(current_search);
}
}
}
current_page = res.page;
update_search_lock = false;
$('#searchform input').prop('disabled', false);
},
error: function(jqXHR, textStatus, errorThrown) {
$('.results').html("");
$('#searchform').text("Search is not currently operational: " + textStatus);
update_search_lock = false;
$('#searchform input').prop('disabled', false);
$("#loading_status").show();
$("#show_more").hide();
}
});
return false; // cancel any event
}
// jQuery may not be loaded yet so execute this naively
window.post_jquery_load_scripts.push(function() {
update_search(1, null, null, true);
$(window).scroll(function() {
if (update_search_lock) return;
var s = $('#show_more');
if (s.is(":visible") && $(window).scrollTop() + $(window).height() > s.offset().top)
s.click();
});
});