开发者

jqtransform form events problem

I'm a web design开发者_Python百科er with css experience, but I'm not a JS developer.

I used jqtransform to style a search form , the problem is it removes all events from selectors and the search button .

here is the code before jqtransform

<input id="go-search" type="button" name="btn_search" value="search" onclick="searchLocations()" />

and after applying the script, the button doesn't do any thing I opened the page source and here how it looks like:

<button class=" jqTransformButton" type="button" name="btn_search" id="go-search"><span><span>search</span></span></button>

Please help me !


I think it’s best to put new questions in new posts …

$(function() { $("form.jqtransform").jqTransform(); $("#city").click(populateDestrict); });

when assigning functions to an event by JavaScript, you only assign the function reference. putting parentheses behind a function identifyer will execute the function.

function myFunction(x)
{
    alert(x);
    return 1;
}

// correct, the onload event will trigger the function
window.onload = myFunction;
// alerts "[object Event]"

// wrong
window.onload = myFunction("hello");
// this assigns "1" to the onload property*
// * - IE may execute this, but no standard compliant browser


As far as can see only buttons are affected. The script replaces your original buttons with new ones, so everything besides the id, name, type & class attributes is removed. You would have to assign the function anew when jqtransform finished its job.

// after jqtransform
// probably $("#go-search").click(searchLocations); in jQuery, but I’m not a jQuery user … thus in plain JavaScript:
var bt = document.getElementById("go-search");
if (window.addEventListener) {
    bt.addEventListener("click", searchLocations, false);
}
else {
    bt.attachEvent("onclick", searchLocations);
}

I would hazard a guess at using it like

$(function() {
    //find all form with class jqtransform and apply the plugin
    $("form.jqtransform").jqTransform();
    // fix your button
    $("#go-search").click(searchLocations);
});


May be late but... Faced the same issue recently. and the solution was to use this version of the jqTransform script:

NOTE: 1) Open your jqTransform file, 2)DELETE everything, 3)COPY the code bellow 4) PASTE and 5) SAVE.

VOILA!!

    /*
     *
     * jqTransform
     * by mathieu vilaplana mvilaplana@dfc-e.com
     * Designer ghyslain armand garmand@dfc-e.com
     *
     *
     * Version 1.0 25.09.08
     * Version 1.1 06.08.09
     * Add event click on Checkbox and Radio
     * Auto calculate the size of a select element
     * Can now, disabled the elements
     * Correct bug in ff if click on select (overflow=hidden)
     * No need any more preloading !!
     *
     ******************************************** */

    (function($){
            var defaultOptions = {preloadImg:true};
            var jqTransformImgPreloaded = false;

            var jqTransformPreloadHoverFocusImg = function(strImgUrl) {
                    //guillemets to remove for ie
                    strImgUrl = strImgUrl.replace(/^url\((.*)\)/,'$1').replace(/^\"(.*)\"$/,'$1');
                    var imgHover = new Image();
                    imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-hover.$1');
                    var imgFocus = new Image();
                    imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-focus.$1');                        
            };


            /***************************
              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 = $('.jqTransformSelectWrapper ul:visible');
                    ulVisible.each(function(){
                            var oSelect = $(this).parents(".jqTransformSelectWrapper: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('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect($(event.target)); }
            };

            /* Apply document listener */
            var jqTransformAddDocumentListener = function (){
                    $(document).mousedown(jqTransformCheckExternalClick);
            };     

            /* Add a new handler for the reset action */
            var jqTransformReset = function(f){
                    var sel;
                    $('.jqTransformSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function(){$('a:eq('+ sel +')', this).click();});});
                    $('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked');
                    $('input:checkbox, input:radio', f).each(function(){if(this.checked){$('a', $(this).parent()).addClass('jqTransformChecked');}});
            };

            /***************************
              Buttons
             ***************************/
            $.fn.jqTransInputButton = function(){
                    return this.each(function(){
                            var newBtn = $('<button id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +' jqTransformButton"><span><span>'+ $(this).attr('value') +'</span></span>')
                                    .hover(function(){newBtn.addClass('jqTransformButton_hover');},function(){newBtn.removeClass('jqTransformButton_hover')})
                                    .mousedown(function(){newBtn.addClass('jqTransformButton_click')})
                                    .mouseup(function(){newBtn.removeClass('jqTransformButton_click')})
                            ;
                            $(this).replaceWith(newBtn);
                    });
            };

            /***************************
              Text Fields
             ***************************/
            $.fn.jqTransInputText = function(){
                    return this.each(function(){
                            var $input = $(this);

                            if($input.hasClass('jqtranformdone') || !$input.is('input')) {return;}
                            $input.addClass('jqtranformdone');

                            var oLabel = jqTransformGetLabel($(this));
                            oLabel && oLabel.bind('click',function(){$input.focus();});

                            var inputSize=$input.width();
                            if($input.attr('size')){
                                    inputSize = $input.attr('size')*10;
                                    $input.css('width',inputSize);
                            }

                            $input.addClass("jqTransformInput").wrap('<div class="jqTransformInputWrapper"><div class="jqTransformInputInner"><div></div></div></div>');
                            var $wrapper = $input.parent().parent().parent();
                            $wrapper.css("width", inputSize+10);
                            $input
                                    .focus(function(){$wrapper.addClass("jqTransformInputWrapper_focus");})
                                    .blur(function(){$wrapper.removeClass("jqTransformInputWrapper_focus");})
                                    .hover(function(){$wrapper.addClass("jqTransformInputWrapper_hover");},function(){$wrapper.removeClass("jqTransformInputWrapper_hover");})
                            ;

                            /* If this is safari we need to add an extra class */
                            $.browser.safari && $wrapper.addClass('jqTransformSafari');
                            $.browser.safari && $input.css('width',$wrapper.width()+16);
                            this.wrapper = $wrapper;

                    });
            };

            /***************************
              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(){aLink.trigger('click');});

                            var aLink = $('<a href="#" class="jqTransformCheckbox"></a>');
                            //wrap and add the link
                            $input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>').parent().prepend(aLink);
                            //on change, change the class of the link
                            $input.change(function(){
                                    this.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
                                    return true;
                            });
                            // Click Handler, trigger the click and change event on the input
                            aLink.click(function(){
                                    //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");     
                                    return false;
                            });

                            // set the default state
                            this.checked && aLink.addClass('jqTransformChecked');          
                    });
            };
            /***************************
              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 = $('<a href="#" class="jqTransformRadio" rel="'+ this.name +'"></a>');
                            $input.addClass('jqTransformHidden').wrap('<span class="jqTransformRadioWrapper"></span>').parent().prepend(aLink);

                            $input.change(function(){
                                    inputSelf.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
                                    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('jqTransformChecked');
                    });
            };

            /***************************
              TextArea
             ***************************/  
            $.fn.jqTransTextarea = function(){
                    return this.each(function(){
                            var textarea = $(this);

                            if(textarea.hasClass('jqtransformdone')) {return;}
                            textarea.addClass('jqtransformdone');

                            oLabel = jqTransformGetLabel(textarea);
                            oLabel && oLabel.click(function(){textarea.focus();});

                            var strTable = '<table cellspacing="0" cellpadding="0" border="0" class="jqTransformTextarea">';
                            strTable +='<tr><td id="jqTransformTextarea-tl"></td><td id="jqTransformTextarea-tm"></td><td id="jqTransformTextarea-tr"></td></tr>';
                            strTable +='<tr><td id="jqTransformTextarea-ml">&nbsp;</td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr">&nbsp;</td></tr>';  
                            strTable +='<tr><td id="jqTransformTextarea-bl"></td><td id="jqTransformTextarea-bm"></td><td id="jqTransformTextarea-br"></td></tr>';
                            strTable +='</table>';                                 
                            var oTable = $(strTable)
                                            .insertAfter(textarea)
                                            .hover(function(){
                                                    !oTable.hasClass('jqTransformTextarea-focus') && oTable.addClass('jqTransformTextarea-hover');
                                            },function(){
                                                    oTable.removeClass('jqTransformTextarea-hover');                                       
                                            })
                                    ;

                            textarea
                                    .focus(function(){oTable.removeClass('jqTransformTextarea-hover').addClass('jqTransformTextarea-focus');})
                                    .blur(function(){oTable.removeClass('jqTransformTextarea-focus');})
                                    .appendTo($('#jqTransformTextarea-mm div',oTable))
                            ;
                            this.oTable = oTable;
                            if($.browser.safari){
                                    $('#jqTransformTextarea-mm',oTable)
                                            .addClass('jqTransformSafariTextarea')
                                            .find('div')
                                                    .css('height',textarea.height())
                                                    .css('width',textarea.width())
                                    ;
                            }
                    });
            };

            /***************************
              Select
             ***************************/  
            $.fn.jqTransSelect = function(){
                    return this.each(function(index){
                            var $select = $(this);

                            if($select.hasClass('jqTransformHidden')) {return;}
                            if($select.attr('multiple')) {return;}

                            var oLabel  =  jqTransformGetLabel($select);
                            /* First thing we do is Wrap it */
                            var $wrapper = $select
                                    .addClass('jqTransformHidden')
                                    .wrap('<div class="jqTransformSelectWrapper"></div>')
                                    .parent()
                                    .css({zIndex: 10-index})
                            ;

                            /* Now add the html for the select */
                            $wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>');
                            var $ul = $('ul', $wrapper).css('width',$select.width()).hide();
                            /* Now we add the options */
                            $('option', this).each(function(i){
                                    var oLi = $('<li><a href="#" index="'+ i +'">'+ $(this).html() +'</a></li>');
                                    $ul.append(oLi);
                            });

                            /* Add click handler to the a */
                            $ul.find('a').click(function(){
                                            $('a.selected', $wrapper).removeClass('selected');
                                            $(this).addClass('selected');  
                                            /* Fire the onchange event */
                                            //if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) { $select[0].selectedIndex = $(this).attr('index'); $select[0].onchange(); }
                                            if ($select[0].selectedIndex != $(this).attr('index')) { $select[0].selectedIndex = $(this).attr('index'); $select.change(); }

                                    //Redundent code
                                            //$select[0].selectedIndex = $(this).attr('index');
                                            $('span:eq(0)', $wrapper).html($(this).html());
                                            $ul.hide();
                                            return false;
                            });
                            /* Set the default */
                            $('a:eq('+ this.selectedIndex +')', $ul).click();
                            $('span:first', $wrapper).click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
                            oLabel && oLabel.click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
                            this.oLabel = oLabel;

                            /* Apply the click handler to the Open */
                            var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper)
                                    .click(function(){
                                            //Check if box is already open to still allow toggle, but close all other selects
                                            if( $ul.css('display') == 'none' ) {jqTransformHideSelect();}
                                            if($select.attr('disabled')){return false;}

                                            $ul.slideToggle('fast', function(){                                    
                                                    var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
                                                    $ul.animate({scrollTop: offSet});
                                            });
                                            return false;
                                    })
                            ;

                            // Set the new width
                            var iSelectWidth = $select.outerWidth();
                            var oSpan = $('span:first',$wrapper);
                            var newWidth = (iSelectWidth > oSpan.innerWidth())?iSelectWidth+oLinkOpen.outerWidth():$wrapper.width();
                            $wrapper.css('width',newWidth);
                            $ul.css('width',newWidth-2);
                            oSpan.css({width:iSelectWidth});

                            // Calculate the height if necessary, less elements that the default height
                            //show the ul to calculate the block, if ul is not displayed li height value is 0
                            $ul.css({display:'block',visibility:'hidden'});
                            var iSelectHeight = ($('li',$ul).length)*($('li:first',$ul).height());//+1 else bug ff
                            (iSelectHeight < $ul.height()) && $ul.css({height:iSelectHeight,'overflow':'hidden'});//hidden else bug with ff
                            $ul.css({display:'none',visibility:'visible'});

                    });
            };
            $.fn.jqTransform = function(options){
                    var opt = $.extend({},defaultOptions,options);

                    /* each form */
                     return this.each(function(){
                            var selfForm = $(this);
                            if(selfForm.hasClass('jqtransformdone')) {return;}
                            selfForm.addClass('jqtransformdone');

                            $('input:submit, input:reset, input[type="button"]', this).jqTransInputButton();                       
                            $('input:text, input:password', this).jqTransInputText();                      
                            $('input:checkbox', this).jqTransCheckBox();
                            $('input:radio', this).jqTransRadio();
                            $('textarea', this).jqTransTextarea();

                            if( $('select', this).jqTransSelect().length > 0 ){jqTransformAddDocumentListener();}
                            selfForm.bind('reset',function(){var action = function(){jqTransformReset(this);}; window.setTimeout(action, 10);});

                            //preloading dont needed anymore since normal, focus and hover image are the same one
                            /*if(opt.preloadImg && !jqTransformImgPreloaded){
                                    jqTransformImgPreloaded = true;
                                    var oInputText = $('input:text:first', selfForm);
                                    if(oInputText.length > 0){
                                            //pour ie on eleve les ""
                                            var strWrapperImgUrl = oInputText.get(0).wrapper.css('background-image');
                                            jqTransformPreloadHoverFocusImg(strWrapperImgUrl);                                     
                                            var strInnerImgUrl = $('div.jqTransformInputInner',$(oInputText.get(0).wrapper)).css('background-image');
                                            jqTransformPreloadHoverFocusImg(strInnerImgUrl);
                                    }

                                    var oTextarea = $('textarea',selfForm);
                                    if(oTextarea.length > 0){
                                            var oTable = oTextarea.get(0).oTable;
                                            $('td',oTable).each(function(){
                                                    var strImgBack = $(this).css('background-image');
                                                    jqTransformPreloadHoverFocusImg(strImgBack);
                                            });
                                    }
                            }*/


                    }); /* End Form each */

            };/* End the Plugin */

})(jQuery);

You could also get the same here: http://pastebin.com/Q1pYMKZ2

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜