【问题标题】:How to create a "reusable" function in jquery?如何在 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');

【问题讨论】:

    标签: javascript jquery parameter-passing


    【解决方案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 中指定自己的显示元素。

      【讨论】:

      • 感谢您的意见。我进入了项目的另一部分,还不能尝试这些建议,但我很快就会,然后再报告。 :
      猜你喜欢
      • 2014-08-11
      • 2011-12-30
      • 2017-07-05
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多