mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-11-08 15:51:16 +08:00
fix(input): clear button is not activated on swipe (#25825)
resolves #24857
This commit is contained in:
@ -402,12 +402,6 @@ export class Input implements ComponentInterface {
|
|||||||
this.isComposing = false;
|
this.isComposing = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
private clearTextOnEnter = (ev: KeyboardEvent) => {
|
|
||||||
if (ev.key === 'Enter') {
|
|
||||||
this.clearTextInput(ev);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private clearTextInput = (ev?: Event) => {
|
private clearTextInput = (ev?: Event) => {
|
||||||
if (this.clearInput && !this.readonly && !this.disabled && ev) {
|
if (this.clearInput && !this.readonly && !this.disabled && ev) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
@ -496,8 +490,15 @@ export class Input implements ComponentInterface {
|
|||||||
aria-label="reset"
|
aria-label="reset"
|
||||||
type="button"
|
type="button"
|
||||||
class="input-clear-icon"
|
class="input-clear-icon"
|
||||||
onPointerDown={this.clearTextInput}
|
onPointerDown={(ev) => {
|
||||||
onKeyDown={this.clearTextOnEnter}
|
/**
|
||||||
|
* This prevents mobile browsers from
|
||||||
|
* blurring the input when the clear
|
||||||
|
* button is activated.
|
||||||
|
*/
|
||||||
|
ev.preventDefault();
|
||||||
|
}}
|
||||||
|
onClick={this.clearTextInput}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Host>
|
</Host>
|
||||||
|
|||||||
@ -157,3 +157,47 @@ test.describe('input: basic', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.describe('input: clear button', () => {
|
||||||
|
test.beforeEach(({ skip }) => {
|
||||||
|
skip.rtl();
|
||||||
|
});
|
||||||
|
test('should clear the input when pressed', async ({ page }) => {
|
||||||
|
await page.setContent(`
|
||||||
|
<ion-input value="abc" clear-input="true"></ion-input>
|
||||||
|
`);
|
||||||
|
|
||||||
|
const input = page.locator('ion-input');
|
||||||
|
const clearButton = input.locator('.input-clear-icon');
|
||||||
|
|
||||||
|
await expect(input).toHaveJSProperty('value', 'abc');
|
||||||
|
|
||||||
|
await clearButton.click();
|
||||||
|
await page.waitForChanges();
|
||||||
|
|
||||||
|
await expect(input).toHaveJSProperty('value', '');
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* Note: This only tests the desktop focus behavior.
|
||||||
|
* Mobile browsers have different restrictions around
|
||||||
|
* focusing inputs, so these platforms should always
|
||||||
|
* be tested when making changes to the focus behavior.
|
||||||
|
*/
|
||||||
|
test('should keep the input focused when the clear button is pressed', async ({ page }) => {
|
||||||
|
await page.setContent(`
|
||||||
|
<ion-input value="abc" clear-input="true"></ion-searchbar>
|
||||||
|
`);
|
||||||
|
|
||||||
|
const input = page.locator('ion-input');
|
||||||
|
const nativeInput = input.locator('input');
|
||||||
|
const clearButton = input.locator('.input-clear-icon');
|
||||||
|
|
||||||
|
await input.click();
|
||||||
|
await expect(nativeInput).toBeFocused();
|
||||||
|
|
||||||
|
await clearButton.click();
|
||||||
|
await page.waitForChanges();
|
||||||
|
|
||||||
|
await expect(nativeInput).toBeFocused();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user