jqtransform форма событий проблема - PullRequest
0 голосов
/ 04 мая 2010

Я веб-дизайнер с опытом работы с css, но я не разработчик JS.

Я использовал jqtransform для стилизации формы поиска, проблема в том, что он удаляет все события из селекторов и кнопки поиска.

вот код перед jqtransform

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

и после применения скрипта кнопка ничего не делает Я открыл страницу источника и вот как это выглядит:

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

Пожалуйста, помогите мне!

Ответы [ 3 ]

1 голос
/ 05 мая 2010

Я думаю, что лучше ставить новые вопросы в новых сообщениях ...

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

при назначении функций событию с помощью JavaScript, вы назначаете только ссылку на функцию. если поставить скобки за идентификатором функции, она будет выполнена.

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
1 голос
/ 04 мая 2010

Насколько видно, затрагиваются только кнопки. Сценарий заменяет ваши оригинальные кнопки новыми, поэтому все, кроме атрибутов id, name, type & class, удаляется. Вы должны будете назначить функцию заново, когда jqtransform завершит свою работу.

// 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);
}

Я бы рискнул предположить, используя его как

$(function() {
    //find all form with class jqtransform and apply the plugin
    $("form.jqtransform").jqTransform();
    // fix your button
    $("#go-search").click(searchLocations);
});
0 голосов
/ 22 августа 2014

Может быть поздно, но ... Недавно столкнулся с той же проблемой. и решением было использовать эту версию сценария jqTransform:

ПРИМЕЧАНИЕ: 1) Откройте файл jqTransform , 2) УДАЛИТЕ все , 3) КОПИЯ код ниже 4) ПАСТА и 5) СОХРАНИТЬ.

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);

Вы также можете получить то же самое здесь: http://pastebin.com/Q1pYMKZ2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...