如何在 jquery 中创建“可重用”函数?

Posted

技术标签:

【中文标题】如何在 jquery 中创建“可重用”函数?【英文标题】:How to create a "reusable" function in jquery? 【发布时间】:2012-01-05 06:35:44 【问题描述】:

我有这段代码很好用:

function displayVals() 
    var phonevals = $("#bphonesel").val();
    $('#bphone').val(phonevals);


$("select").change(displayVals);
displayVals();

我希望能够将它重复用于我网站上的所有其他选择框。所以,我想我会使用参数来做到这一点。但是,到目前为止,我一直无法使语法正确。这是我所拥有的,但它不起作用。任何帮助将不胜感激。

function displayVals(inputfld, boundfld) 
    var nvenval = $(inputfld).val();
    $(boundfld).val(nvenval);


$("select").change(displayVals());
displayVals('#bphonesel', '#bphone');

【问题讨论】:

【参考方案1】:

如果你想把它变成一个 jQuery 函数,像这样:

$.fn.displayVals = function() 
// Function stuff goes here
);

$('#element').displayVals()

在函数内部,$(this) 的工作方式与您期望的一样。只需在 docReady 之外定义它就可以了。话虽如此,看起来您只需要在 .change 事件内的 displayVals() 调用中定义选择器:

$("select").change(displayVals('#bphonesel','#bphone'));

除此之外,我必须查看您的其余代码才能了解可能导致问题的原因。

【讨论】:

你不应该在 jQuery 函数中使用$(this)this 已经是一个扩展对象。 哎呀。你是对的 :) 无论如何,Chris Fulstow 的回答要好得多。【参考方案2】:
$.fn.displayVals = function(inputfld, boundfld) 
    this.change(function() 
        var nvenval = $(inputfld).val();
        $(boundfld).val(nvenval);
    


$("select").displayVals();

查看jQuery docs on authoring plugins 了解更多信息。

【讨论】:

【参考方案3】:

我可能会这样做:

    (function( $ )
          $.fn.displayVals = function() 

            this.change(function() 
                var val = $(this).val();
                var elemid = $(this).attr("data-elem");
                if (elemid)
                    $("#" + elemid).html(val);
            );

          ;
        )( jQuery );

    $(function () 
        $(".display-vals").displayVals();
    );

然后,在您希望它处理的任何选择元素上,您可以执行以下操作::

<select class="display-vals" data-elem="val-div">
    <option>item 1</option>
    <option>item 2</option>
    <option>item 3</option>
</select>

<div id="val-div"></div>

这使用 html5 样式的“data-”属性。这也意味着您不必在文档加载事件中设置每个单独的下拉菜单,每个选择都可以在 html 中指定自己的显示元素。

【讨论】:

感谢您的意见。我进入了项目的另一部分,还不能尝试这些建议,但我很快就会,然后再报告。 :

以上是关于如何在 jquery 中创建“可重用”函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应钩子中创建可重用状态?

如何在ktor中创建可重用的拦截器?

如何在JSF中创建可重用的组件?

在 Google AdWords 中创建可重用函数

在Vue中创建可重用的 Transition

如何在本机反应中创建充满功能的帮助文件?