【问题标题】:wicket checkbox AttributeAppender检票口复选框 AttributeAppender
【发布时间】:2012-05-15 20:14:22
【问题描述】:

在我正在处理的代码中,有一个普通(无 ajax)checkbox,我想将 JavaScript onchange 事件附加到它上面:

checkbox.add(new AttributeAppender("onchange", Model.of("func(this);"), ""));

还有一个AjaxEventBehavior("onclick")添加到checkbox

onchange 事件必须调用的函数只调用一次,即使我多次选中和取消选中 checkbox。我猜这与 'ajax' 'onclick' 事件有关。

checkbox 被选中或未选中时,如何调用func(this)

谢谢

【问题讨论】:

    标签: javascript ajax checkbox wicket onchange


    【解决方案1】:

    关于我的 cmets 的另一个答案,这是我建议使用 AjaxCallDecorator

    new AjaxEventBehavior('onclick'){
        protected void onEvent(AjaxRequestTarget target) {
          //call your onclick handling logic here
        }
    
        protected IAjaxCallDecorator getAjaxCallDecorator(){
          return new IAjaxCallDecorator(){
             public CharSequence decorateScript(Component component,
                            CharSequence script){
                //prepend your javascript call to ajax server call
                return "func(this);"+script;
             }
             public CharSequence decorateOnSuccessScript(Component component,
                                     CharSequence script){
                return script;
             }
             public CharSequence decorateOnFailureScript(Component component,
                                     CharSequence script){
                return script;
             }
          };
        }
    }
    

    【讨论】:

    • 谢谢!很高兴知道这一点。
    【解决方案2】:

    您可以将func(this); 函数调用为AjaxEventBehavior. getPreconditionScript()getSuccessScript(),而不是在onchange 事件上添加和AttributeAppender

    看看 http://wicket.apache.org/apidocs/1.5/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.html#getPreconditionScript()

    您的AjaxEventBehavior 将与此类似:

    new AjaxEventBehavior("onclick") {
    
         protected void onEvent(AjaxRequestTarget target) {
                 System.out.println("ajax here!");
         }
    
         protected CharSequence getSuccessScript() {
                 return "func(this);";
         }
    }
    

    【讨论】:

    • 谢谢,我确实考虑过这个。但我试图在 onEvent() 方法中做一些事情,比如调用 func(this),但我不知道如何做,而是查看 getSuccessScript() 或 getPreconditionScript()。所以我仍然不知道如何实施你的建议。能否请您举例说明如何使用 getPreconditionScript()、getSuccessScript() 或 onEvent(),以便我可以调用 javascript func(this) 方法?
    • 非常感谢,我刚刚对其进行了测试,它完全符合我的要求。我想可以忽略 onEvent 方法吗?
    • 所以你的意思是现在你有两个AjaxEventBehavior都附加到onclick事件?
    • 不,一个AjaxEventBehavior 附加到onclick 事件,另一个附加到“onchange”事件。在onchange 的情况下,我只是将onEvent 方法留空,但overridegetSuccessScript 方法留空。所以我的问题是,可以将onEvent 方法留空吗?
    • 嗯,我认为将onEvent 留空是可以的,但有点奇怪。我想只使用onclick 事件,所以你可以加入这两个AjaxEventBehavior 中只有一个附加到onclick。我现在不使用最新版本的 Internet Explorer,但旧版本不会按预期触发 onchange 事件。查看本站:webbugtrack.blogspot.com.es/2007/11/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多