Javascript 以编程方式选择actionsheet会引发错误
我正在使用uitest.js(基于Jasmine.js构建)测试我们的剑道UI移动应用程序。我正在显示一个操作表,并以编程方式选择其中一个选项。这在应用程序中正常工作,但会抛出一个测试失败的错误 我使用的行动表如下:Javascript 以编程方式选择actionsheet会引发错误,javascript,jquery,kendo-ui,jasmine,kendo-mobile,Javascript,Jquery,Kendo Ui,Jasmine,Kendo Mobile,我正在使用uitest.js(基于Jasmine.js构建)测试我们的剑道UI移动应用程序。我正在显示一个操作表,并以编程方式选择其中一个选项。这在应用程序中正常工作,但会抛出一个测试失败的错误 我使用的行动表如下: <ul data-role="actionsheet" id="marketplace-price-actions" > <li class="km-actionsheet-title">Select Price</li> <
<ul data-role="actionsheet" id="marketplace-price-actions" >
<li class="km-actionsheet-title">Select Price</li>
<li><a href="#" data-action="setPriceFilter('3')">$$$</a></li>
<li><a href="#" data-action="setPriceFilter('2')">$$</a></li>
<li><a href="#" data-action="setPriceFilter('1')">$</a></li>
</ul>
这是可行的,但会引发以下错误:
TypeError: "undefined is not a function"
我已经创建了一个JSFIDLE,它在上显示这个。一定要打开控制台
编辑根据所选答案,错误是将值传递给函数。我选择创建单独的回调。请参阅。看起来您不应该向操作传递参数。我不知道为什么它会以这种方式实现,但这会导致您的错误(如果您只需单击它,也会发生这种情况,因此它与Jasmine无关) 据我所知,你有三个选择:
kendo.mobile.ui.ActionSheet.fn._click = (function (click) {
return function (e) {
if (e.isDefaultPrevented()) {
return;
}
var action = $(e.currentTarget).data("action");
if (action) {
kendo.getter(action)(window)({
target: this.target,
context: this.context,
element: e.currentTarget // pass in the element that was clicked on
});
}
e.preventDefault();
this.close();
}
})(kendo.mobile.ui.ActionSheet.fn._click);
这样,您至少可以知道单击了哪个元素,并且如果需要,您可以添加数据属性来传递数据,例如:
<li><a href="#" data-value="2" data-action="alertme">$$</a></li>
()
对于选项3,您只需将您的行动定义为:
function alertme(val) {
return function(e) {
console.log(e);
console.log(val);
};
}
你的元素应该是:
<li><a href="#" data-action="alertme('2')">$$</a>
()顺便说一句,我正在使用.mousedown().mouseup(),因为显然kendoui正在捕获.click(),并以不同的方式处理它。我们在控制台中到底在寻找什么?错误显示在控制台中可能是您链接了错误的演示;这只显示了一个按钮我已经更新了上面的链接。谢谢。我最后选择了简单的选项1,因为你是个天才。你的2号解决方案正是我需要的,谢谢你的例子!
function alertme(val) {
return function(e) {
console.log(e);
console.log(val);
};
}
<li><a href="#" data-action="alertme('2')">$$</a>