我有以下复选框:
function checkOnlyOne(slno, this) { //Error here
console.log(this);
//$('.serviceable_check_1').not(this).prop('checked', false);
if(this.checked){
$('.serviceable_check_1').not(this).prop('checked', false);
}
}
javascript功能是:
Uncaught SyntaxError: Unexpected token this
我收到javascript错误onchange
。如何发送此参数// tested class
import B_Import from './b';
import C_Import from './c';
let B = B_Import;
let C = C_Import;
export function mock(B_Mock, C_Mock) {
B = B_Mock || B_Import;
C = C_Mock || C_Import;
}
export default class A {
someFunction() {
let instanceB = new B();
return instanceB.doSomething()
.then(() => this.doSomethingElse())
.then((data) => {
// async context, other tests will start before this.
let instanceC = new C(data);
});
}
}
// test
import A, { mock as mockB } from './a';
setupMockB = (cfg, mockCallback) => {
const ClassMock = class {
constructor() {
// use cfg
}
doSomething() {}
}
if(mockCallback) {mockCallback(ClassMock.prototype);}
mockB(ClassMock, null)
}
describe('test', () => {
afterEach(() => mockB())
it('case1', () => {
a = new A();
setupMockB(cfg1, (mb) => sinon.stub(mb, 'doSomething').resolves())
return a.someFunction().then(() => { /* asserts1 */ });
})
it('case2', () => {
a = new A();
setupMockB(cfg2, (mb) => sinon.stub(mb, 'doSomething').rejects())
return a.someFunction().then(() => { /* asserts2 */ });
})
})
事件?
答案 0 :(得分:1)
您的此未提及任何内容。除非是对象或DOM的一部分,否则不能将 this 放在函数上。
您可以将 this 关键字放在将触发函数作为参数的元素上。然后在你的函数上,将参数变成一个变量,如chckbx或radiobtn,如果那些是你的元素
document.getElementById('mycheckbox').onchange = myFunction(this);
function myFunction(chckbx){
console.log(chckbx);
}
答案 1 :(得分:1)
见下面的代码段
function checkOnlyOne(slno, obj) { //Error here
console.log(obj);
//$('.serviceable_check_1').not(this).prop('checked', false);
if(obj.checked){
$('.serviceable_check_1').not(obj).prop('checked', false);
}
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="checkbox"><input type="checkbox" class="serviceable_check_1" id="serviceable1" name="condition_of_materials[]" onclick="checkOnlyOne(1,this); return false;" ><span> Serviceable</span></label>
&#13;
答案 2 :(得分:1)
你可以获得事件对象
可维修
function checkOnlyOne(slno, e {
console.log(e.target);
//$('.serviceable_check_1').not(e.target).prop('checked', false);
if(this.checked)
$('.serviceable_check_1').not(e.target).prop('checked', false);
}
e.target是您点击的元素
答案 3 :(得分:1)
你应该使用.call并传递obj作为第一个参数,将其用作this
context
<input id="serviceable1" onclick="checkOnlyOne.call(obj, 1); return false;" ><span> Serviceable</span></label>
答案 4 :(得分:1)
首先是错误:你不能将参数命名为“this”,因为它是一个保留字。
现在,“this”指的是它的执行上下文,因此,onclick处理程序是元素的一个方法,因此在它的上下文(在我们的例子中是输入元素)中将会被删除。
注意片段中的第二个警告,您将看到onclick调用您从其正文中定义的函数,这意味着我们定义的此函数不是输入对象元素的方法,因此不会“附加”到它将从声明它的上下文(窗口对象)中调用。
var value = "I'm the value out of the input object";
function displayMessage(context){
//we save the original context as arg
alert("input's value: " + context.value);
alert("the onclick handler:" + context.onclick);
//but notic that the context has changed
alert("the context in our function: " + this);
alert("when trying without saving the previous context: " + this.value);
}
<input type="checkbox" id="subscribeToNews" value="Newsletter" onclick="displayMessage(this)"/>
<label for="subscribeToNews" >Subscribe </label>