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

我有一些很好的代码:

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

 $.fn.displayVals = function(inputfld, boundfld) { this.change(function() { var nvenval = $(inputfld).val(); $(boundfld).val(nvenval); } } $("select").displayVals(); 

查看有关创作插件的jQuery文档以获取更多信息。

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

 $.fn.displayVals = function() { // Function stuff goes here }); $('#element').displayVals() 

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

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

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

我可能会这样做:

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

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

  

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