/* 表单控件 */ /*************************** Labels ***************************/ var jqTransformGetLabel = function(objfield) { var selfForm = $(objfield.get(0).form); var oLabel = objfield.next(); if (!oLabel.is('label')) { oLabel = objfield.prev(); if (oLabel.is('label')) { var inputname = objfield.attr('id'); if (inputname) { oLabel = selfForm.find('label[for="' + inputname + '"]'); } } } if (oLabel.is('label')) { return oLabel.css('cursor', 'pointer'); } return false; }; /* Hide all open selects */ var jqTransformHideSelect = function(oTarget) { var ulVisible = $('.selectWrapper ul:visible'); ulVisible.each(function() { var oSelect = $(this).parents(".selectWrapper:first").find("select").get(0); //do not hide if click on the label object associated to the select if (!(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0))) { $(this).hide(); } }); }; /* Check for an external click */ var jqTransformCheckExternalClick = function(event) { if ($(event.target).parents('.selectWrapper').length === 0) { jqTransformHideSelect($(event.target)); } }; /* Apply document listener */ var jqTransformAddDocumentListener = function() { $(document).mousedown(jqTransformCheckExternalClick); }; /*************************** Check Boxes ***************************/ $.fn.jqTransCheckBox = function() { return this.each(function() { if ($(this).hasClass('jqTransformHidden')) { return; } var $input = $(this); var inputSelf = this; //set the click on the label var oLabel = jqTransformGetLabel($input); oLabel && oLabel.click(function(ev) { aLink.trigger('click'); ev.stopPropagation(); }); var aLink = $(''); //wrap and add the link $input.addClass('jqTransformHidden').wrap('').parent().prepend(aLink); //on change, change the class of the link $input.change(function(ev) { this.checked && aLink.addClass('checkboxChecked') || aLink.removeClass('checkboxChecked'); ev.stopPropagation(); return true; }); // Click Handler, trigger the click and change event on the input aLink.click(function(ev) { //do nothing if the original input is disabled if ($input.attr('disabled')) { return false; } //trigger the envents on the input object $input.trigger('click').trigger("change"); ev.stopPropagation(); return false; }); // set the default state this.checked && aLink.addClass('checkboxChecked'); }); }; /*************************** Radio Buttons ***************************/ $.fn.jqTransRadio = function() { return this.each(function() { if ($(this).hasClass('jqTransformHidden')) { return; } var $input = $(this); var inputSelf = this; oLabel = jqTransformGetLabel($input); oLabel && oLabel.click(function() { aLink.trigger('click'); }); var aLink = $(''); $input.addClass('jqTransformHidden').wrap('').parent().prepend(aLink); $input.change(function() { inputSelf.checked && aLink.addClass('radioChecked') || aLink.removeClass('radioChecked'); return true; }); // Click Handler aLink.click(function() { if ($input.attr('disabled')) { return false; } $input.trigger('click').trigger('change'); // uncheck all others of same name input radio elements $('input[name="' + $input.attr('name') + '"]', inputSelf.form).not($input).each(function() { $(this).attr('type') == 'radio' && $(this).trigger('change'); }); return false; }); // set the default state inputSelf.checked && aLink.addClass('radioChecked'); }); }; /*************************** Select ***************************/ $.fn.jqTransSelect = function() { var nlen = $(this).length; return this.each(function(index) { var $select = $(this); var hasClass = false; // if($select.hasClass('jqTransformHidden')) {return;} // if($select.attr('multiple')) {return;} var oLabel = jqTransformGetLabel($select); var $wrapper; /* First thing we do is Wrap it */ if (!$select.hasClass('jqTransformHidden')) { hasClass = true; $wrapper = $select .addClass('jqTransformHidden') .wrap('
') .parent() .css({ zIndex: nlen - index }); /* Now add the html for the select */ $wrapper.prepend('