【问题标题】:Setting a select value设置选择值
【发布时间】:2010-09-03 01:12:00
【问题描述】:

大家好,有什么方法可以设置选择的值并让它表现得好像它是由用户更改的一样? 我用过

$(document).ready(function(){
    $('#department').change(function(){
        $('#academicbody').hide();
        var selected = $("#department :selected").val();
        $('#progrmmehome').load('/email/programmelist/'+selected);
    });
    $('#university').change(function(){
        var selected = $("#university :selected").val();
        $('#department').val(selected);
        $('#progrmmehome').load('/email/programmelist/'+selected);
    });
});

basically, when the university is selected, its value is the department id which is then used in the url.因此,在名为“university”的select的change事件中,我希望通过设置department select的值,执行department的change事件中的逻辑。

有什么想法吗?

【问题讨论】:

  • 这可能应该用 javascript 和您正在使用的库进行标记。在我看来像 jQuery。

标签: javascript jquery html forms


【解决方案1】:

我原以为它也会触发#department 更改事件处理程序。您可以按如下方式手动触发它:

$('#university').change(function(){
    var selected = $("#university :selected").val();
    $('#department').val(selected);
    $('#department').trigger('change');
});

【讨论】:

    【解决方案2】:

    这里有一个资源可以解决您所描述的确切问题:

    jQuery val( val ) and the absence of onChange firing (另外,这里是文章的 Google 缓存版本的链接,因为该网站目前速度很慢或没有响应:jQuery val( val ) and the absence of onChange firing (Cached)

    总而言之,没有可靠的跨浏览器方法来人为触发实际浏览器事件。具体来说,IE 和 Firefox 对事件的实现方式不同,因此像 jQuery 这样的跨浏览器兼容库不可能忠实地重现事件。

    因此,典型的方法是手动触发您通过 jQuery 分配的事件处理程序。由于前面提到的原因,这实际上并没有触发事件,而只是调用分配的处理函数。

    您可以按照 Pat 的建议手动触发事件,方法是使用 $('#department').trigger('change'); 或快捷功能 $('#department').change();(两者具有相同的效果)。我在上面链接的文章也提出了一个创造性的解决方案。而不是每次都必须手动触发事件,如果您想多次执行此操作,只需像这样扩展 jQuery:

        (function($) {
            $.fn.valChange = function(newValue) {
                return this.each(function() {
                    var obj = $(this);
                    obj.val(newValue);
                    obj.change();
                });
            };
        })(jQuery);
    

    然后,当您要更改值时,请使用valChange() 函数而不是标准的val()。简而言之,就是使用标准的val() 函数更改值,然后触发更改事件。

    这是所有这些的现场演示:http://jsfiddle.net/rXEPW/

    【讨论】:

      【解决方案3】:

      您是否尝试过从$('#university').change() 内部呼叫$('#department').change()

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 2011-10-27
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多