Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无论如何更改,如何将函数绑定到select_Javascript_Jquery - Fatal编程技术网

Javascript 无论如何更改,如何将函数绑定到select

Javascript 无论如何更改,如何将函数绑定到select,javascript,jquery,Javascript,Jquery,我想用javascript将函数绑定到select。我可以用onchange或.change()来完成。但是,如果更改以编程方式完成,则似乎不会触发my函数: e、 g 如果用户更改select值,并且在(a)情况下,触发器将工作。但是,第二个病例将不会被发现 如何进行绑定,以便它也能检测到案例(b)。尝试使用.trigger(): 编辑: 按照@Rory McCrossan的提示,如果事件是select元素,则可以扩展val()函数来触发该事件 // Save old val var

我想用javascript将函数绑定到select。我可以用onchange或.change()来完成。但是,如果更改以编程方式完成,则似乎不会触发my函数:

e、 g

如果用户更改select值,并且在(a)情况下,触发器将工作。但是,第二个病例将不会被发现

如何进行绑定,以便它也能检测到案例(b)。

尝试使用
.trigger()

编辑: 按照
@Rory McCrossan
的提示,如果事件是select元素,则可以扩展val()函数来触发该事件

  // Save old val
  var oldVal = $.fn.val;
  $.fn.val = function(value) {
      // Execute parent val() 
      obj = oldVal.apply(this, arguments);

      // If it is a select
      if(Object.prototype.toString.apply(this.get(0)) == '[object HTMLSelectElement]') {
          // Trigger the event
          this.trigger("change");
      }
      return obj;
  };

  $(document).ready(function() {
    jQuery('#selectId').val("v3");
  });
这里有一个正在工作的

方法本身不会触发更改事件。您可以做的最简单的事情就是在需要时手动触发它。然而,如果您确实希望它自动发生,您可以扩展select元素的
valHook
setter:

$.valHooks.select.set = function(orig) {
    return function(el) {
        var result = orig.apply(this, arguments);
        $(el).trigger('change');
        return result;
    };
}($.valHooks.select.set);
这似乎很有效。您只需使用原始钩子,并使用触发代码对其进行补充


演示:

如果元素是
select
,则可以原型化jQuery
val()
函数,以自动触发
更改
事件。我个人只想使用选项A。bind to
$(document)。onChange(“id”,callback)
它将起作用,
[…]当用户提交对元素值的更改时,[…]将触发更改事件。[…]
因此,无论何时以编程方式更改值,您都需要自己触发事件。@RorymcCross无需修补prototype,因为select元素可以扩展
valHook
  // Save old val
  var oldVal = $.fn.val;
  $.fn.val = function(value) {
      // Execute parent val() 
      obj = oldVal.apply(this, arguments);

      // If it is a select
      if(Object.prototype.toString.apply(this.get(0)) == '[object HTMLSelectElement]') {
          // Trigger the event
          this.trigger("change");
      }
      return obj;
  };

  $(document).ready(function() {
    jQuery('#selectId').val("v3");
  });
$.valHooks.select.set = function(orig) {
    return function(el) {
        var result = orig.apply(this, arguments);
        $(el).trigger('change');
        return result;
    };
}($.valHooks.select.set);