From 40161f2be944edc558f0301e5f8809c9a3d118e2 Mon Sep 17 00:00:00 2001 From: James Warwood Date: Thu, 19 Mar 2015 09:37:37 +0800 Subject: [PATCH] Ignore clicks on disabled menu items in Select component (Bootstrap's li.disabled class); add tests to ensure Select value doesn't change and changed event doesn't fire --- src/select.js | 5 +++++ test/select-test.js | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/select.js b/src/select.js index 27dde1b95..76c500bb8 100644 --- a/src/select.js +++ b/src/select.js @@ -34,6 +34,11 @@ define(function(require) { itemclicked: function (e) { this.$selectedItem = $(e.target).parent(); + + if (this.$selectedItem.is('.disabled')) { + return; + } + this.$hiddenField.val(this.$selectedItem.attr('data-value')); this.$label.text(this.$selectedItem.text()); diff --git a/test/select-test.js b/test/select-test.js index c972c3651..4bffb6c47 100644 --- a/test/select-test.js +++ b/test/select-test.js @@ -119,4 +119,24 @@ require(['jquery', 'fuelux/select'], function ($) { equal(selectedText, 'One', 'text passed in from changed event'); equal(selectedValue, 1, 'value passed in from changed event'); }); -}); \ No newline at end of file + + test("should not fire changed event on disabled items", function () { + var eventFired = false; + var selectedText = ''; + var selectedValue = ''; + + var $select = $(html).select().on('changed', function (evt, data) { + eventFired = true; + selectedText = data.text; + selectedValue = data.value; + }); + + // Disable menu item then simulate changed event + $select.find('li:first').addClass('disabled') + .find('a').click(); + + equal(eventFired, false, 'changed event not fired'); + equal(selectedText, '', 'text not changed'); + equal(selectedValue, '', 'value not changed'); + }); +});