无法从华廷
在选择列表的火jQuery的变化()事件我有一个选择框无法从华廷
<select id="myselectbox">
<option value='a'>First option</option>
<option value='b'>Second option</option>
</select>
和jQuery
$('#myselectbox').change(function() {
...
});
并有华廷测试
SelectList list = Browser.SelectList(Find.ById("myselectbox"));
list.Select("First option");
在IE中,这会更改选择框,但不会触发jquery事件处理程序。我意识到围绕IE中change()事件处理程序的许多问题。所以我尝试添加了一些东西到测试到事件迫使火:
list.Blur();
list.Keypress('\r');
list.Click();
我也试图选择框外单击以清除病灶,希望这将触发事件。
任何想法?
您可以手动触发事件:
$('#myselectbox').change();
你烧不改变价值的其他JavaScript事件,所以他们不会触发change
事件。
谢谢!我最终从Watin做到了这一点:Browser.Eval(“$('#myselectbox')。change();”)并且做到了! – fredw 2010-09-16 19:34:37
从Matt Ball的回答和OP的附加步骤中,我将下面的扩展方法添加到测试帮助类中。
using WatiN.Core;
namespace Some.Test.Project
{
public static class WatiNExtensions
{
public static void ForceChange(this Element e)
{
e.DomContainer.Eval("$('#" + e.Id + "').change();");
}
}
}
现在,到目前为止,无论如何,我已经成功地做到了:
SelectList list = Browser.SelectList(Find.ById("myselectbox"));
list.Select("First option");
list.ForceChange();
OK,它充其量是一个小的方便,但我发现它是有用的。无论如何,来自我的OP和答案!
不错!感谢您添加这个额外的善良。 – fredw 2011-02-11 04:56:07
当页面上有两个元素具有相同的ID时,使用JQuery ID选择器可能会产生问题。下面的代码应该深入到相应的WaitN元素
Element.DomContainer.Eval(String.Format("$({0}).change();", Element.GetJavascriptElementReference()));
但是再一次,您不应该在同一页上有两个具有相同ID的元素,因为这与HTML 4和HTML 5规范相反。 – 2012-10-17 15:14:44
只有当_jQuery_不存在于页面上时,才想知道如何单独使用** JavaScript **来执行此操作?我发现这个更好。 – rahoolm 2013-12-21 05:33:38
如果select例如没有设置ID,这非常有用。 – 2014-10-24 19:48:22
这似乎是IE的fireEvent中的一个错误。 WatiN的SelectList.Select()生成类似于
var newEvt = document.createEventObject();
newEvt.button = 1;
watin3.fireEvent('onchange', newEvt);
其中,watin3是本机HTMLSelectElement。 fireEvent调用不会触发jQuery附加事件。你可以通过手动调用$('#id')[0].fireEvent('onchange');
所以你最好的选择是像其他人使用jQuery一样手动触发事件。
这为我工作:
public static void SelectByValueAndBlur(this SelectList selectList, string value)
{
selectList.Focus();
selectList.SelectByValue(value);
selectList.Blur();
}
必须这样做,因为jQuery在尝试其他方式时没有被定义为某种原因。 – rball 2012-02-23 21:19:25
“变化” 是该事件。 “onchange”是事件处理程序。 WatiN的Select()是越野车;它最终会发射“onchange”,好像它是一个事件,它不会帮助想要“改变”事件的海报发射。
正如答案中所述,最终必须使用JavaScript/JQuery来触发“更改”事件才能解决此问题。
+1:刚刚碰到同样的问题我自己 – Mayo 2011-02-22 15:27:21
+1:我也是。有没有人报告过这个bug? – 2011-06-30 12:46:56